코딩테스트연습/프로그래머스

[프로그래머스 - JAVA] 3진법 뒤집기

:)jun 2021. 12. 1. 00:07

https://programmers.co.kr/learn/courses/30/lessons/68935

 

코딩테스트 연습 - 3진법 뒤집기

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

programmers.co.kr

// 테스트코드

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.*;

class Quiz1_reversedTernaryTest {

    Quiz1_reversedTernary q;

    @BeforeEach
    void setUp() {
        q = new Quiz1_reversedTernary();
    }

    @Test
    void test1() {
        assertEquals(7, q.solution(45));
    }

    @Test
    void test2() {
        assertEquals(229, q.solution(125));
    }

}

// 프로덕션코드

public class Quiz1_reversedTernary {
    public int solution(int n) {
        StringBuffer sb = new StringBuffer();
        return Integer.parseInt(getTernaryReversedString(n,sb),3);
    }

    String getTernaryReversedString(int n, StringBuffer sb) {

        if (n / 3 >= 1) {
            sb.append(n % 3);
            n /= 3;
        } else {
            sb.append(n);
            return sb.toString();
        }

        return getTernaryReversedString(n,sb);
    }
}

// 성공!... 처음에는 3진법 뒤집은 것을 10진수로 나타내라해서 0021 -> 12 이건줄 알았는데 0021 -> 7 이었다.
//  문제를 보자마자 키보드에 손부터 내 모습은 마치 투우사의 빨간 기를 보고 달리는 멍청한 소 같았다.
//  예제까지 꼼꼼히 읽자 ! 오히려 시간이 단축된다.

// 이름도 예쁘고 코드도 깔끔해보인다. 끝!