다희의 코딩 성장일기
[프로그래머스] level2. 124 나라의 숫자 (자바 JAVA) 본문
[ 문제 ] [프로그래머스] level2. 124 나라의 숫자 (자바 JAVA)
문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/12899
# 접근 방법 및 풀이
- 풀이를 생각해내는데 어려워서 인터넷 찾아봤다..휴!
- 방법은 첫번째 방법과 두번째 방법이 있는데, 두번째 방법이 응용될 경우 더 좋을 것 같다.
- 먼저 첫번째 풀이는 3진법과 1,2,4를 엮은 방법이다.
- 3진법은 0, 1, 2로 표현이되고, 124나라는 1,2,4로 표현된다. 여기서 나머지가 0이 나올경우 4로 표현해주고 몫에서 -1을 해주면 된다.
- 그러나 이 방법은 1, 2, 4 나라일 경우만 표현 가능하다.
- 만약에 1, 2, 4가 아니라 5, 6, 7 나라일 경우는 어떻게 표현할 수 있을까?
-
10진수 숫자 567나라 1 5 2 6 3 7 4 55 5 56 6 57 - 위와 같이 표현된다. 1~3까지는 5, 6, 7이라는 3가지 숫자로 표현되지만, 그보다 큰 수는 자릿수가 하나 더 늘어나 2자리가 된다. 따라서 4는 55부터 시작된다. 7부터는 첫째자리 수에서 자릿수 오름으로 65가 될 것이다.
- 이때 끝의 자리가 계속해서 5, 6, 7, 5, 6, 7, 5, 6, 7, 5 ,6 ,7 이 반복되는 것을 알 수있다.
- 여기서 두번째 방법은 먼저, 5,6,7숫자로만 이루어진 배열 arr[] = {5, 6, 7}을 생성해준다.
-
n (십진수) n-1 (n-1)%3 끝의자리 수 1 0 0 arr[0] = 5 2 1 1 arr[1] = 6 3 2 2 arr[2] = 7 4 3 0 arr[0] = 5 5 4 1 arr[1] = 6 6 5 2 arr[2] = 7 - n -=1 즉, n에 -1을 한 후, %3을 하면 0, 1, 2 가 나올것이고, arr배열에서 해당 숫자 인덱스의 값을 뽑으면 된다.
- arr[0] = 5 , arr[1] = 6, arr[2] = 7이 나온다.
- 여기서 %3인 이유는 3개의 숫자로만 이루어져있기 때문이다.
- 그리고 n/3의 몫을 구해준다. 해당 몫이 0이면 break해서 빠져나온다. (여기서 n은 n-=1임)
- 두번째 코드를 보면 더 이해하기 쉬울 것이다! 자세한건 코드참조해서 직접 숫자를 넣어서 과정을 그려가보면서 하면 이해가 쉽다.
# 주의할 점
- break 빠져나올 조건의 분기 위치 파악!
JAVA 코드
첫번째 풀이
class Solution {
public String solution(int n) {
StringBuilder sb = new StringBuilder();
while(true){
int quo = n / 3;
int remain = (n % 3 == 0)? 4 : n % 3;
sb.append(remain);
n = (remain == 4)? quo-1: quo;
if(n == 0)
break;
}
return sb.reverse().toString();
}
}
두번째 풀이
class Solution {
public String solution(int n) {
StringBuilder sb = new StringBuilder();
int arr[] = {1,2,4};
while(true){
n -= 1;
int quo = n / 3;
int remain = n % 3;
sb.append(arr[remain]);
if(quo == 0)
break;
n = quo;
}
return sb.reverse().toString();
}
}
REVIEW
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] level2. 최댓값과 최솟값 (자바 JAVA) (0) | 2021.08.24 |
---|---|
[프로그래머스] level2. 땅따먹기 (자바 JAVA) (0) | 2021.08.24 |
[프로그래머스] level2. N개의 최소공배수 (자바 JAVA) (0) | 2021.08.24 |
[프로그래머스] level2. 행렬의 곱셈 (자바 JAVA) (0) | 2021.08.24 |
[프로그래머스] level1. 실패율 (자바 JAVA) (0) | 2021.08.24 |
Comments