문제 바로가기
문제풀이
1. 처음 풀이
124로만 숫자를 나타낼 수 있다는 점에서 124나라는 3진수를 사용한다는 것을 알 수 있다.
다만, 3진수가 012가 아닌 124로 이루어져 있다.
구현
1. country 배열에 숫자 0, 1, 2, 4로 초기화한다.
2. n > 0 인 경우, 반복
2-1. n을 3으로 나눈 나머지가 0이면, 결과에 4를 붙이고 n은 3으로 나눈 후 1을 뺌
2-2. 나머지가 0이 아니면, 결과에 country 배열의 나머지번째를 붙이고 n은 3으로 나눔
3. 결과 출력
class Solution {
public String solution(int n) {
String answer = "";
int[] country = { 0, 1, 2, 4 };
while (n > 0) {
if(n % 3 == 0) {
answer = Integer.toString(country[3]).concat(answer);
n = n / 3 - 1;
} else {
answer = Integer.toString(country[n % 3]).concat(answer);
n /= 3;
}
}
return answer;
}
}
2. 배열의 순서를 변경하여 조건을 줄인 풀이
구현
1. country 배열에 숫자 4, 1, 2로 초기화한다.
2. n > 0 인 경우, 반복
2-1. 결과에 country 배열의 나머지번째를 붙임
2-2. n은 n-1 을 3으로 나눈 값으로 변경한다.
class Solution {
public String solution(int n) {
String answer = "";
int[] country = { 4, 1, 2 };
while (n > 0) {
answer = Integer.toString(country[n % 3]).concat(answer);
n = (n-1) / 3;
}
return answer;
}
}
마치며
주어진 조건을 활용하여 그대로 코드를 짜다 보니 조건에 따른 코드 구현을 할 수 밖에 없었다.
하지만 배열의 순서를 변경하는 것만으로도 불필요한 조건을 없앨 수 있었고 이로 인해 코드를 간결하게 줄일 수 있었다.
사고를 말랑말랑하게 연습을 해야겠다!
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] 숫자 문자열과 영단어 for JAVA - Map vs String (0) | 2022.03.17 |
---|---|
[프로그래머스] k진수에서 소수 개수 구하기 for JAVA (0) | 2022.01.19 |
[프로그래머스] 신고 결과 받기 for Java - HashMap 를 적용한 풀이 (0) | 2022.01.17 |
[프로그래머스] 쿼드압축 후 개수 세기 for JAVA 분할정복 (0) | 2022.01.05 |
[프로그래머스] 이진 변환 반복하기 for JAVA (0) | 2022.01.04 |