쌓고 쌓다

[프로그래머스] 124 나라의 숫자 C++ 풀이 본문

알고리즘/프로그래머스

[프로그래머스] 124 나라의 숫자 C++ 풀이

승민아 2022. 7. 14. 20:53

https://school.programmers.co.kr/learn/courses/30/lessons/12899?language=cpp 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

전체 코드

#include <iostream>
#include <string>
using namespace std;

string solution(int n) {
    string answer = "";
    while(n>0)
    {
        int remainder = n%3;
        n/=3;
        if(remainder==0)
        {
            answer="4"+answer;
            n-=1;
        }
        else
            answer=to_string(remainder)+answer;
    }
    
    return answer;
}

 

10진수를 3진수로 바꾸는 방법을 이용해 풀어야한다.

진수 변환하는데 이해가 있어야할 것 같다.

 

10진법을 3으로 나눈 나머지에 따라 각 자리의 수가 결정된다.

1(10진수)은 %3 결과로 1이 나온다. 124 나라에서 사용할 수 있는 수라 그냥 붙여 사용하면된다.

2(10진수) 또한 마찬가지다 %3으로 2가 나오고 사용할 수 있다.

그런데 %3의 결과로 0이 나오면 규칙이 하나 생긴다.

0을 4로 써주고 진수변환하는데 쓰이는 몫을 -1을 해주는것이다.

 

예를 들어 12(10진수)를 124 나라의 수로 바꿔보겠다.

 

 

12를 3으로 나눠 몫 4와 나머지 0을 얻었다. 이때 진수 변환할때 나머지를 사용하는데

0을 4로 사용하자. 그리고 몫을 -1을 해준다.

 

그러면 몫은 3이되고 나머지는 4로 보는것이다.

이것은 진수변환할때처럼 계속 반복해준다.

 

그러면 44가 나오는데 10진수 12를 124 나라의 숫자로 바꾼것이 44가 나오는 것이다.

 

여기서 왜 몫에 -1을 해주는지 궁금했다.

10진수 10, 11, 12를 예로 보면 10, 11은 몫이 3으로 나오지만 12는 3으로 나누면 딱 떨어져 몫이 4가 나온다.

이는 몫이 +1 되어 나오는 것이다.

이렇게 딱 떨어질때(나머지가 0)일때 몫을 -1 해줌으로써 몫이 증가되는걸 막고 0만 4로 바꿀 수 있는 것 같다.

Comments