Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 튜플
- 조합
- 완전탐색
- 영문자 확인
- 후위 표기법
- 동적계획법
- 알고리즘
- 점프와 순간이동
- Java
- 프로그래머스
- 문자열
- 최소공배수
- fragment identifier
- 완전 탐색
- Stack
- 보이어무어
- 순열
- pandas
- 반복문
- Dynamic Programming
- 메뉴리뉴얼
- 어려웠던 문제
- python
- 쿼드압축 후 개수세기
- 규칙찾기
- HashSet
- 2017 카카오 코드
- 에라토스테네스의 체
- dfs
- HashMap
Archives
- Today
- Total
csmoon1010의 SW 블로그
[200520] 124 나라의 숫자 - 연습문제(level2) 본문
1. 문제이해
- 10진법의 수를 124 나라의 숫자로 변경하기
: 1, 2, 4를 써서 표현할 수 있는 숫자들의 오름차순 배열로 표현
2. 전략
(1) 자릿수 결정
- Math.pow(3, size)를 size가 1일 때부터 더해서 범위의 시작값 구하기
(ex> 3+9+27(Math.pow(3, 3)까지) < n <= 3+9+27+81(Math.pow(3, 4)까지)라면 "4자릿수")
(2) 자릿수 내에서 앞에서 부터 숫자 결정
- gap = (int) Math.pow(3, 자릿수-1)
1. n <= num+gap
: "1" 추가, 범위 시작값 = num
2. n <= num+gap*2
: "2" 추가, 범위 시작값 = num+gap
3. n <= num+gap*3
"4" 추가, 범위 시작값 = num+gap*2
3. 참고사항
- 다른 풀이 : 사실상 "3진수"와 비슷
- n%3이 1이면 1, 2이면 2, 0이면 4로 처리 --> 앞에 붙이기(뒤부터 채워나감)
- n = (n-1)/3과 연산 계속 -- 자리올림 방지(나누어 떨어지는 경우 n으로 하면 문제가 생김)
4. 코드
class Solution {
public String solution(int n) {
String answer = "";
int size = 0, num = 0;
while(num < n){
size++;
num += Math.pow(3, size);
}
num -= Math.pow(3, size); //범위 시작값
for(int i = size-1; i >= 0; i--){
int gap = (int)Math.pow(3, i);
if(n <= num + gap){
answer += "1";
}
else if(n <= num + gap*2){
answer += "2";
num += gap;
}
else if(n <= num + gap*3){
answer += "4";
num += gap*2;
}
}
return answer;
}
}
'Coding Test > 프로그래머스' 카테고리의 다른 글
★[200526] 카카오프렌즈 컬러링북 - 2017 카카오코드 예선(level2) (0) | 2020.05.26 |
---|---|
[200524] 문자열 압축 - 2020 KAKAO BLIND RECRUITMENT(level2) (0) | 2020.05.24 |
[200520] 스킬트리 - Summer/Winter Coding(~2018)(level2) (0) | 2020.05.20 |
[200519] [1차]다트 게임 - 2018 KAKAO BLIND RECRUITMENT(level1) (0) | 2020.05.19 |
[200519] 실패율 - 2019 KAKAO BLIND RECRUITMENT(level1) (0) | 2020.05.19 |
Comments