-
(Java) Programmers 124 나라의 숫자Algorithm 2023. 12. 1. 11:52반응형
- 목차
문제 소개.
"Programmers 의 124 나라의 숫자"에 대한 링크를 아래에 첨부하겠습니다.
https://school.programmers.co.kr/learn/courses/30/lessons/12899
먼저 124나라의 진법의 패턴을 파악을 파악해야합니다.
1 의 경우.
a) 3으로 나눈 나머지는 1이며, 124 진법으로 표현하면 1이 됩니다.
5 의 경우.
a) 3으로 나눈 몫과 나머지는 1, 2 입니다.
b) 몫인 1을 3으로 한번 더 나눕니다. 이때 몫과 나머지는 0, 1 이 됩니다.
나머지들을 나열하면 1, 2 입니다.
10의 경우.
a) 10을 3으로 나눈 몫과 나머지는 3과 1가 됩니다.
b) 몫은 한번 더 3으로 나눕니다. 3을 3으로 나누게 되면 몫과 나머지가 1 과 0 이 됩니다.
c) 몫인 1을 한번 더 3으로 나누게 되면, 몫과 나머지는 0, 1 이 됩니다.
이때 나머지들을 모두 나열하면, 1, 0, 1 이 됩니다.
11의 경우.
a) 11을 3으로 나눈 몫과 나머지는 3과 2가 됩니다.
b) 몫은 한번 더 3으로 나눕니다. 3을 3으로 나누게 되면 몫과 나머지가 1 과 0 이 됩니다.
c) 몫인 1을 한번 더 3으로 나누게 되면, 몫과 나머지는 0, 1 이 됩니다.
이때 나머지들을 모두 나열하면, 1, 0, 2 이 됩니다.
위 경우는 10진수를 3진수로 표현하는 방식입니다.
3진수 값 중 3은 4로 치환하고, 0 인 높은 자리수에서 내림하여 표현하면 124 나라의 진법을 표현할 수 있습니다.
문제 풀이.
참고로 StringBuilder 를 사용하였습니다.
n 의 범위가 50,000,000 인데요.
5천만번의 String 연산을 수행하게 되면 시간초과가 발생합니다.
그래서 StringBuilder 를 사용하게 되었습니다.
class Solution { public String solution(int n) { StringBuilder answer = new StringBuilder(); while (true) { // n 이 0보다 작아지는 경우에 반복문을 종료합니다. // n 이 3보다 작은 경우에 종료됩니다. if (n <= 0) break; int quotient = n / 3; int remainder = n % 3; // 10진법에서 3으로 나눈 나머지는 0, 1, 2 가 될 수 있으며 // 124나라에선 4, 1, 2 로 표현되어야 합니다. if (remainder == 0) { quotient -= 1; remainder = 4; } answer.insert(0, remainder); n = quotient; } return answer.toString(); } }
반응형'Algorithm' 카테고리의 다른 글
Programmers 다음 큰 숫자 (0) 2023.12.01 (Java) Programmers 올바른 괄호 (2) 2023.12.01 Programmers 게임 맵 최단거리 (0) 2023.12.01 Programmers 카카오 프렌즈 컬러링북 (0) 2023.12.01 [Programmers] 카테고리 별 상품 개수 구하기 (SQL, Left, 문자 추출) (0) 2023.11.30