https://programmers.co.kr/learn/courses/30/lessons/12899
방법 1: 바로 변환
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#include <string>
#include <vector>
using namespace std;
string solution(int n) {
string answer = "";
// 3 진법 012 = 124나라의 412
char num[] = { '4', '1', '2' };
while (n > 0)
{
int rest = n % 3;
n /= 3;
// 124나라에는 0이 없기 때문에 나머지가 0일 경우, n -= 1
if (rest == 0)
{
n--;
}
answer = num[rest] + answer;
}
return answer;
}
Colored by Color Scripter
|
방법 2: 3진법 저장 후 변환
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
#include <string>
#include <vector>
using namespace std;
// 3진법 수 구하기
string get_ternary(int n)
{
if (n == 0)
{
return "";
}
return get_ternary(n / 3).append(to_string(n % 3));
}
string solution(int n) {
string tri = get_ternary(n);
// 뒤에서부터 0이면 전체수 - 1 한 뒤, 0 --> 4로 교환
for (int i = tri.size() - 1; i > 0; i--)
{
if (tri[i] == '0')
{
tri[i - 1] -= 1;
tri[i] = '4';
}
else if (tri[i] < '0')
{
tri[i - 1] -= 1;
tri[i] += 3;
}
}
if (tri[0] == '0')
{
}
return tri;
}
Colored by Color Scripter
|
방법2는 볼거 없다. 그냥 내 삽질흔적의 기록이다 ㅋㅋ
방법1은 프로그래머스 다른 분 풀이를 참고한 것이다.
TIP1
숫자 3개만으로 나타낸다는 점에서 3진법을 활용해야 한다는 것을 알 수 있다.
TIP2
그러나 124 나라에는 숫자 0이 없기 때문에 역시 보통 3진법이 아니다.
나머지가 0이 나올때마다 숫자가 1씩 차이가 날것인데,
그냥 1을 빼주면 된다.
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스]연습문제 : N개의 최소공배수 (level 2) (c++) (0) | 2020.05.01 |
---|---|
[프로그래머스]완전탐색 : 소수 찾기 (level 2)(c++) (2) | 2020.04.30 |
[프로그래머스]스택/큐 : 다리를 지나는 트럭 (level 2)(c++) (0) | 2020.04.30 |
[프로그래머스]스택/큐 : 쇠막대기 (level 2)(c++) (0) | 2020.04.29 |
[프로그래머스]스택/큐 : 탑 (level 2) (c++) (0) | 2020.04.29 |
댓글