해설
모든 숫자를 (1, 2, 4) 3가지 수로 나타낸다고 했으므로 3진법과 관련있음을 유추할 수 있다.
10진법을 3진법으로 나타내기 위해서는 3으로 계속 나누어가며 나머지가 무엇인지 살펴야 한다.
나머지가 1일 떄는 1, 나머지가 2일 때는 2, 나머지가 0일 떄는 4를 문자열에 붙이고 맨 마지막에 이를 뒤집어 결과를 리턴한다.
단 주의할 것은, 3으로 나누어떨어질 경우(나머지가 0일 경우) 몫을 1 감소시키고 나머지를 3 증가시켜 3을 4로 변환시키자.
예를 들어, 10을 1, 2, 4 숫자로 변환할 때
10 / 3 = 몫 3 ... 나머지 1 => 1
3 / 3 = 몫 1 ... 나머지 0 => 몫에 1을 뺴주면 나머지는 3이 된다. 나머지 3을 4로 변환하여 문자열에 붙인다.
결과적으로, 10은 41로 변환된다.
코드
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <tuple>
#include <vector>
#include <stack>
#include <queue>
#include <deque>
#include <set>
#include <map>
#include <iostream>
using namespace std;
using ii = pair<int, int>;
using iii = tuple<int, int, int>;
#define X first
#define Y second
string solution(int n) {
string s = "";
while (n) {
int d = n%3;
n /= 3;
if (d == 1) s += "1";
else if (d == 2) s += "2";
else { // d == 0
s += "4";
n--;
}
}
reverse(s.begin(), s.end());
return s;
}
'대딩 > 프로그래머스풀이' 카테고리의 다른 글
[프로그래머스 lv2] 방문 길이 풀이 (0) | 2022.08.10 |
---|---|
[프로그래머스 lv2] 기능개발 풀이 (0) | 2022.08.09 |
[프로그래머스 lv2] 멀쩡한 사각형 (0) | 2022.08.09 |
[프로그래머스 lv2] 양궁대회 풀이 (0) | 2022.03.24 |
[프로그래머스 lv2] 주차요금계산 풀이 (0) | 2022.03.24 |
댓글