반응형

문제

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진법 뒤집기

 /**
     * 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
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기