본문 바로가기

Algorithm/String

(C++) - LeetCode (easy) 1694. Reformat Phone Number

반응형

https://leetcode.com/problems/reformat-phone-number/description/

문자열을 formatting하는 문제였습니다.

📕 풀이방법

📔 풀이과정

1. number에서 '-'와 ' '를 제거한 filter된 number를 반환하는 getFilteredNum을 구현해 지역변수 filteredNum을 선언 후 결과값을 저장해줍니다.

2. filteredNum에서 필요한 reformat을 진행한 결과를 반환하는 함수 getReformatNum을 구현해줍니다.

  2-1. filteredNum에 대해 for loop를 수행하며 3개씩 끊어만든 문자열 뒤에 '-'를 달아주는데, overflow가 나지 않도록 주의하며 남은 문자열이 4개인 경우에는 3개씩이 아닌 2개씩 끊어 연결한 문자열에 '-'를 달아줍니다.

📔 정답 출력 | 반환

getReformatNum의 결과를 반환합니다.


📕 Code

📔 C++

class Solution {
public:
    string getFilteredNum(string number) {
        string num;
        for(auto n : number) {
            if (n != '-' && n != ' ') num += n;
        }
        return num;
    }

    string getReformatNum(string filteredNum) {
        string reformatNum;
        for(int i = 0; i < filteredNum.size(); i+=3) {
            if (filteredNum.size() - i == 4) {
                reformatNum += filteredNum.substr(i, 2) + '-';
                i--;
            } else if(i + 3 < filteredNum.size()) {
                reformatNum += filteredNum.substr(i, 3) + '-';
            } else {
                reformatNum += filteredNum.substr(i);
            }
        }
        return reformatNum;
    }

    string reformatNumber(string number) {
        string filteredNum = getFilteredNum(number);
        return getReformatNum(filteredNum);
    }
};

*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.