ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (Java) Programmers 124 나라의 숫자
    Algorithm 2023. 12. 1. 11:52
    728x90
    반응형

     

    - 목차

     

    문제 소개.

    "Programmers 의 124 나라의 숫자"에 대한 링크를 아래에 첨부하겠습니다.

     

    https://school.programmers.co.kr/learn/courses/30/lessons/12899

     

    프로그래머스

    코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

    programmers.co.kr

     

    먼저 124나라의 진법의 패턴을 파악을 파악해야합니다.

     

    1 의 경우.

    a) 3으로 나눈 나머지는 1이며, 124 진법으로 표현하면 1이 됩니다.

     

    5 의 경우.

    a) 3으로 나눈 몫과 나머지는 1, 2 입니다.

    b) 몫인 1을 3으로 한번 더 나눕니다. 이때 몫과 나머지는 0, 1 이 됩니다.

    나머지들을 나열하면 1, 2 입니다.

    10의 경우.

    a) 10을 3으로 나눈 몫과 나머지는 3과 1가 됩니다.

    b) 몫은 한번 더 3으로 나눕니다. 3을 3으로 나누게 되면 몫과 나머지가 1 과 0 이 됩니다.

    c) 몫인 1을 한번 더 3으로 나누게 되면, 몫과 나머지는 0, 1 이 됩니다.

    이때 나머지들을 모두 나열하면, 1, 0, 1 이 됩니다.

     

    11의 경우.

    a) 11을 3으로 나눈 몫과 나머지는 3과 2가 됩니다.

    b) 몫은 한번 더 3으로 나눕니다. 3을 3으로 나누게 되면 몫과 나머지가 1 과 0 이 됩니다.

    c) 몫인 1을 한번 더 3으로 나누게 되면, 몫과 나머지는 0, 1 이 됩니다.

    이때 나머지들을 모두 나열하면, 1, 0, 2 이 됩니다.

     

    위 경우는 10진수를 3진수로 표현하는 방식입니다.

    3진수 값 중 3은 4로 치환하고, 0 인 높은 자리수에서 내림하여 표현하면 124 나라의 진법을 표현할 수 있습니다.

    문제 풀이.

    참고로 StringBuilder 를 사용하였습니다.

    n 의 범위가 50,000,000 인데요.

    5천만번의 String 연산을 수행하게 되면 시간초과가 발생합니다.

    그래서 StringBuilder 를 사용하게 되었습니다.

     

    class Solution {
        public String solution(int n) {
            StringBuilder answer = new StringBuilder();
            
            while (true) {
                // n 이 0보다 작아지는 경우에 반복문을 종료합니다. 
                // n 이 3보다 작은 경우에 종료됩니다. 
                
                if (n <= 0) break;
                
                int quotient = n / 3;
                int remainder = n % 3;
                
                // 10진법에서 3으로 나눈 나머지는 0, 1, 2 가 될 수 있으며
                // 124나라에선 4, 1, 2 로 표현되어야 합니다. 
                if (remainder == 0) {
                    quotient -= 1;
                    remainder = 4;
                } 
            
                answer.insert(0, remainder);
                
                n = quotient;
            }
            
            return answer.toString();
        }
    }

    반응형
Designed by Tistory.