공부블로그
[프로그래머스] 3진법 뒤집기 본문
https://programmers.co.kr/learn/courses/30/lessons/68935
코딩테스트 연습 - 3진법 뒤집기
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요. 제한사항 n은 1 이상 100,000,000 이하인 자연수
programmers.co.kr
public int solution(int n) {
int answer = 0;
String s = "012";
StringBuilder sb=new StringBuilder();
while(true){
if(n<3){
sb.append(n);
break;
}
sb.append(s.charAt(n%3)); //나머지
n /= 3; //몫
}
int num = sb.length()-1;
for(int i=num; i>=0; i--){
answer+=(sb.charAt(i)-48)*Math.pow(3,num-i);
}
return answer;
}
개선+배운 점
> 3진법은 0~2만 사용하기 때문에 굳이 String s에서 charAt()을 할 필요 없음
그냥 몫%3만 저장하면 됨.
> 10진법 -> n진법으로 변환 시 몫이 n보다 작을 경우 몫=0 나머지=그대로 n을 반환.
위 문제에서는 뒤집어 10진법으로 고치는데 이때 몫이 자리값을 차지해 결과적으로 3을 더 곱한 값을 반환했음.
'IT > 알고리즘' 카테고리의 다른 글
[프로그래머스] 로또의 최고 순위와 최저 순위 (0) | 2022.06.15 |
---|---|
[프로그래머스] 크레인 인형뽑기 (0) | 2022.06.15 |
[프로그래머스] 모의고사 (0) | 2022.06.11 |
[프로그래머스] 실패율 (0) | 2022.06.02 |
1일 1코딩 [프로그래머스] (0) | 2022.05.24 |
Comments