Algorithm/프로그래머스
[프로그래머스]연습문제 : 124 나라의 숫자 (level 2) (c++)
HBGB
2020. 4. 30. 16:07
https://programmers.co.kr/learn/courses/30/lessons/12899
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
방법 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을 빼주면 된다.