제이슨의 개발이야기
[코딩테스트] 124 나라의 숫자 Java 프로그래머스 level 2 3진법 본문
https://programmers.co.kr/learn/courses/30/lessons/12899
안녕하세요 ! 오늘 저는 프로그래머스 에서 처음으로 level 2 문제를 풀어봤습니다!
확실히 level 1 보다는 어려웠고 좀 더 생각이 필요한거같았습니다
그러나 막 너무 어렵다 , 못풀겠다 이정도는 아니었습니다 ㅎㅎ
문제 설명
124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다.
- 124 나라에는 자연수만 존재합니다.
- 124 나라에는 모든 수를 표현할 때 1, 2, 4만 사용합니다.
예를 들어서 124 나라에서 사용하는 숫자는 다음과 같이 변환됩니다.
10진법 | 124 나라 | 10진법 | 124 나라 |
1 | 1 | 6 | 14 |
2 | 2 | 7 | 21 |
3 | 4 | 8 | 22 |
4 | 11 | 9 | 24 |
5 | 12 | 10 | 41 |
자연수 n이 매개변수로 주어질 때, n을 124 나라에서 사용하는 숫자로 바꾼 값을 return 하도록 solution 함수를 완성해 주세요.
이 문제는 124 나라는 3진법을 사용하는 나라라고 생각하면 쉽고 0은 4로 바꿨다고 생각하면 됩니다!
단
그리고 나서 각 수를 3으로 나누면서 나머지 값과 몫이 3이하가 될때까지 반복하면 됩니다!
ex) 10진법 3은
3/3 -> 몫 1 나머지0
0은 4로 바꾸고 나머지가 0일 경우 몫은 -1 한다
3 -> 4로 바뀜
10진법 10은
10/3 -> 몫 3 나머지 1
3은 4로 바꾸면
10 -> 41로 바뀜
10진법 16은
16/3 -> 몫 5 나머지 1
5는 4이상이므로 한번 더 나눈다
5/3 -> 몫 1 나머지 2
따라서 16은 121이된다
저는 이러한 원리를 이용해서 문제를 풀면 되겠다 란 판단을 했고 문제를 풀었습니다
class Solution {
public String solution(int n) {
return divide(n);
}
private String divide(int n){
String result ="";
if(n/3>3){
if(n%3==0){
result = result.concat(divide(n/3-1));
result = result.concat(String.valueOf(4));
}else{
result = result.concat(divide(n/3));
result = result.concat(String.valueOf(n%3));
}
}else {
if(n==1 || n==2 || n==3){
if(n==3){
result = result.concat(String.valueOf(4));
}else{
result = result.concat(String.valueOf(n));
}
} else if(n/3==0){
return result;
}else if(n%3==0){
result = result.concat(String.valueOf((n/3)-1));
result = result.concat(String.valueOf(4));
}else {
if (n / 3 == 3) {
result = result.concat(String.valueOf(n/3+1));
result = result.concat(String.valueOf(n%3));
}else{
result = result.concat(String.valueOf(n/3));
result = result.concat(String.valueOf(n%3));
}
}
}
return result;
}
}
풀고 나서 다른 분이 푸신 문제를 봤는대 정말 너무 좋고 똑똑한 코드인거 같아서 밑에 같이 올립니다!
항상 자기가 풀고 다른 분이 푼 코드랑 비교해보는것도 큰 공부인거같습니다 ㅎㅎ
class Solution {
public String solution(int n) {
String[] num = {"4","1","2"};
String answer = "";
while(n > 0){
answer = num[n % 3] + answer;
n = (n - 1) / 3;
}
return answer;
}
}
'코딩테스트' 카테고리의 다른 글
[코딩테스트] 짝지어 제거하기 Java 프로그래머스 2017 팁스타운 (0) | 2021.05.29 |
---|---|
[코딩테스트] 기능개발 Java 프로그래머스 스택,큐 level 2 (0) | 2021.05.28 |
[코딩테스트] 시저암호 java 프로그래머스 (0) | 2021.05.25 |
[코딩테스트] 크레인 인형뽑기 게임 Java 2019 카카오 개발자 겨울 인턴십 (0) | 2021.05.23 |
[코딩테스트] 체육복 탐욕법(Greedy) Java 프로그래머스 (0) | 2021.05.21 |