문제
programmers.co.kr/learn/courses/30/lessons/12899
문제 설명
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 함수를 완성해 주세요.
제한사항
- n은 500,000,000이하의 자연수 입니다.
입출력 예
n | result |
1 | 1 |
2 | 2 |
3 | 4 |
4 | 11 |
풀이
숫자 종류가 세 개이기 때문에 연산에서 %3과 /3가 쓰인다. 중요한 건 규칙을 찾는 건데 내가 찾은 규칙은 n을 3으로 나눴을 때 나머지가 0일 때는 4, 1일 때는 1, 2일 때는 2를 뒤에서부터 붙여줘야한다는 것, 숫자를 string에 추가하고 n에 n/3 값을 대입한다는 것이다. 단 이 때 n이 3의 배수인 경우 n에 (n-1)/3이 대입된다.
코드
package Level2;
public class _124나라의숫자 {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(solution(1));
}
public static String solution(int n) {
String answer="";
String []nums= {"4","1", "2"};
StringBuilder sb=new StringBuilder();
while(n>0) {
sb.append(nums[n%3]);
n=(n-1)/3;
}
sb.reverse();
answer=sb.toString();
return answer;
}
}
이게 내가 짠 코드인데... 프로그래머스에서 다른 사람 풀이 보기에 있던 코드가 훨씬 깔끔한 것 같아서 같이 가져왔다...
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;
}
'알고리즘연습 > Programmers' 카테고리의 다른 글
[프로그래머스] 타겟 넘버 java 자바 (0) | 2021.05.19 |
---|---|
[프로그래머스] 오픈채팅방 java 자바 (0) | 2021.05.17 |
[프로그래머스] 소수만들기 java 자바 (0) | 2021.05.15 |
[프로그래머스] 더 맵게 java 자바 (0) | 2021.05.13 |
[프로그래머스] 문자열 압축 자바 java (0) | 2021.05.11 |