쌓고 쌓다
[프로그래머스] 124 나라의 숫자 C++ 풀이 본문
https://school.programmers.co.kr/learn/courses/30/lessons/12899?language=cpp
전체 코드
#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로 바꿀 수 있는 것 같다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 타겟 넘버 C++ 풀이 (0) | 2022.07.15 |
---|---|
[프로그래머스] 기능개발 C++ 풀이 (0) | 2022.07.14 |
[프로그래머스] 멀쩡한 사각형 C++ 풀이 (4) | 2022.07.14 |
[프로그래머스] 단체사진 찍기 C++ 풀이 (0) | 2022.07.13 |
[프로그래머스] 카카오프렌즈 컬러링북 C++ 풀이 (0) | 2022.07.12 |
Comments