프로그래머스 - 124 나라의 숫자

이건 규칙만 알면 위 그림처럼 효율성 flex까지 해낼 수 있는 문제이다.

그래서 그 규칙이 뭐냐?

만약 char arr[3] = {'1', '2', '4'} 라는 게 있다고 치면

숫자 n을 일단 3으로 나눈 '나머지 - 1'을 인덱스로 해서 보면

숫자 1의 answer 는 1, 숫자 2의 answer는 2가 된다.

그런데 3의 경우는 저런 규칙이 적용되지 않는데,

3의 경우만 특별 케이스로 관리해 '4'를 넣어주도록 하자.

그러면 3은 우리 의도대로 '4'를 뱉어낼 것이다.

 

이 때 문자를 삽입하는 위치는 문자열의 맨 앞이어야 한다.

4,5,6,7, ... 하다보면 문자열의 맨 앞에 위 공식을 대입했을 때 어떤 규칙이 보일 것이다.

3으로 나눈 나머지가 1, 2인 경우에는 n을 3으로 나누면 되고,

3으로 나눈 나머지가 0인 경우에는 n을 3으로 나눈 뒤 1을 빼면 끝이다.

 

이 공식을 적용한 답안은 다음과 같다:

#include <string>
#include <vector>

using namespace std;

string solution(int n) {
    string answer = "";
    
    char arr[3] = {'1', '2', '4'};
    
    while (n >= 1) 
    {
        if (n % 3 != 0)
        {
          answer.insert(answer.begin(), arr[(n % 3) - 1]);
          n /= 3;
        }
        else
        {
           answer.insert(answer.begin(), '4');
           n = (n / 3) - 1;
        }
    }
    
    
    return answer;
}

 

 

 

코딩테스트 연습 - 124 나라의 숫자

 

programmers.co.kr

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기
// custom