반응형
문제
programmers.co.kr/learn/courses/30/lessons/68935?language=java
코딩테스트 연습 - 3진법 뒤집기
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요. 제한사항 n은 1 이상 100,000,000 이하인 자연수
programmers.co.kr
코드
/**
* 3진법으로 바꾸자
* n을 3으로 나눈 나머지 를 계속 구한다.
* 그걸 역순으로 정렬하면 바로 우리가 원하는 3진법 수
* 그런데 그걸 다시 역순으로 정렬하고 10진수를 구해야하므로
* 최초에 구한 나머지를 가지고 바로 답을 구하자.
*/
public int solution(int n) {
int answer = 0;
int[] nums = new int[18]; //3의 17승은 129,140,163 //마지막에 -1 넣으려고 한칸 더 씀
//3으로 나눈 나머지들을 순서대로 구하면 3진법의 역순이 됨
int i = 0;
int temp = -1;
int cnt = 0; //총 몇개의 숫자가 들어있는지 체크
while (n >= 3){
nums[i++] = n % 3;
n /= 3;
cnt++;
}
nums[i] = n; //마지막 숫자 추가해주기
nums[++i] = -1; //-1로 끝난거 구분하기
//10진수 값 구하기
int multiple = 1; //3^3, 3^2, 3^1, 3^0 순서대로 더해줄것이므로
for(i = 0 ; i < cnt; i++)
multiple *= 3;
for(i = 0 ; i <= cnt; i++){
answer += nums[i] * multiple;
multiple /= 3;
}
return answer;
}//method
반응형
'개발 > 알고리즘' 카테고리의 다른 글
codeup 1901 (0) | 2021.03.17 |
---|---|
codeup 1430 기억력 테스트 2 (0) | 2021.03.15 |
[프로그래머스] 2016년 (0) | 2021.03.11 |
프로그래머스 체육복 (0) | 2021.03.11 |
[USACO] 소가 길을 건너간 이유 3 백준 14469 (0) | 2021.02.26 |
최근댓글