728x90
programmers.co.kr/learn/courses/30/lessons/12899?language=cpp
문제 설명의 예시들을 보다 보면
1, 2, 4 이 세개의 숫자로 모두 처리하므로,
3으로 나누면서 해결할 수 있음을 알 수 있게 된다.
3으로 나눈 나머지가 0 -> 4
3으로 나눈 나머지가 1 -> 1
3으로 나눈 나머지가 2 -> 2
나머지값을 answer 앞에 하나씩 붙이면서 처리하고
n 을 줄여야하므로, 3으로 나누는데,
주의할점은 3으로 나눌때 n /= 3 만으로는 오류가 날 수 있다.
예를들어, n = 6 일때,
처리 과정을 보면
처음에 answer = arr[6 % 3] + answer 가 되어 answer = "4" 가 되고,
이 n 을 그대로 n /= 3 하게 되면 n = 2 가 되어,
2를 3으로 나눈 나머지가 2가 되버린다
그래서 답이 "24" 가 되버리는데, 실제 답은 "14" 이므로
3으로 나눠떨어지는경우 1을 빼준다. (n = n / 3 - 1)
- c++
#include <string>
using namespace std;
string solution(int n) {
string answer = "";
string arr[3] = {"4", "1", "2"};
while(n != 0) {
answer = arr[n % 3] + answer;
if (n % 3 == 0)
n = n / 3 - 1;
else
n = n / 3;
}
return answer;
}
|
cs |
728x90
'PS' 카테고리의 다른 글
프로그래머스 - 다음 큰 숫자 (0) | 2020.12.07 |
---|---|
프로그래머스 - 기능 개발 (0) | 2020.12.07 |
프로그래머스 - 피보나치 수 (0) | 2020.12.07 |
프로그래머스 - 최댓값과 최솟값 (0) | 2020.12.07 |
BOJ 17142 - 연구소 3 (0) | 2020.12.07 |