문제 URL : https://programmers.co.kr/learn/courses/30/lessons/12899
문제접근법:
10진수 t를 n진법으로 변환할때 스택을 이용하는게 일반적이죠?
하지만 스택보단 vector를 이용해서 거꾸로 읽으면 n진법의 수가 됩니다.
이것까진 쉽습니다.
하지만 이문제는 124만 이용하여 모든수를 표현하는데
3개의 숫자만 이용하니 3진법을 용하는것은 자명합니다.
하지만 3진법은
1->1 ,2->2 , 3->10 이됩니다.
3에서 3으로 나눌경우 몫은 1이고 나머지가 0이되며 그몫1에서 또 3으로 나눠서 몫이0 나머지가 1이 나오기에
10이됩니다.
하지만 문제는
1->1 ,2->2 ,3->4
3에서 나눠지는경우 몫이 1이지만 길이를 1칸줄이기위해서 그몫에서 1을 제거하면 더이상 나눠질수없기때문에 4가나옵니다.
이런원리로 3에서나눠지는경우 몫에서 1을 제거하면 답이 나옵니다.
소스코드:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#include <bits/stdc++.h>
using namespace std;
string solution(int n) {
string answer = "";
while (n) {
if (n % 3 == 0) {
answer += to_string(4);
n /= 3;
n--;
}
else {
answer += to_string(n % 3);
n /= 3;
}
}
reverse(answer.begin(), answer.end());
return answer;
}
|
cs |
궁금한점 혹은 모르는점 어떤질문이든 댓글은 언제나 환영입니다.
'프로그래머스' 카테고리의 다른 글
프로그래머스 미로 탈출 (2021 카카오 채용연계형 인턴십) (2) | 2021.07.28 |
---|---|
프로그래머스 2개 이하로 다른 비트 (0) | 2021.07.28 |
프로그래머스 큰 수 만들기 (0) | 2021.07.25 |
프로그래머스 징검다리 (0) | 2021.07.25 |
프로그래머스 이중우선순위큐 (0) | 2021.07.22 |