본문 바로가기

알고리즘

[알고리즘/Programmers] LV1. 3진법 뒤집기

728x90
반응형

Programmers LV1. 3진법 뒤집기

 

문제 설명

자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.

제한 사항

  • n은 1 이상 100,000,000 이하인 자연수입니다.

입출력 

n result
45 7
125 229

 

사용 언어

Java

해결 방법

문자열로 푸는 방법도 있을 것인데 숫자를 링크드 리스트에 넣어 푸는 방법으로 해결하였다.

LinkedList는 addFirst() 메서드가 있어서 나머지 숫자를 맨 앞에 추가하는 것이 간단해진다.

1. 10진법을 3진법(정순) 으로 변환한다.

2. for문을 돌리며 i를 활용하여 3진법의 맨 앞부터 10진법 수를 구한다.

 

알게된 

  • 3진법 계산 메서드 : Math.pow(진법, 제곱수)

코드

import java.util.LinkedList;

/*
    3진법 뒤집기
 */
public class test_68935 {
    public static void main(String[] args) {
        solution(125);
    }
    static public int solution(int n) {
        int answer = 0;
        LinkedList<Integer> list = new LinkedList<>();

        // n=45, 3진법=1200

        // 10진법 -> 3진법
        while(true) {
            if(n<3) { list.addFirst(n); break;}
            list.addFirst(n%3);
            n /= 3;
        }

        for(int i=0; i<list.size(); i++) {
            if(list.get(i) == 0) continue;
            answer = answer + (int)Math.pow(3, i) * list.get(i);
        }

        return answer;
    }
}

 


 

처음에 문자열로 푸는 방법을 시도하였는데 코드가 통과하지 못했다. 다른 풀이를 참고하여 위처럼 간단히 해결해볼 수 있었다. StringBuffer, StringBuilder 등을 활용하는 풀이도 있었는데.. 기존 방법도 충분히 무난한거같아서 패스.. (귀..귀찮아ㅠ)

728x90
반응형