본문 바로가기

Algorithm/Practice

Programmers - 124 나라의 숫자 with JAVA

 

 

문제

124나라의 숫자는 아래와 같이 표현된다

1 - 1

2 - 2

3 - 4

4 - 11

5 - 12

6 - 14

 

n을 124나라의 숫자로 표현하라.

 

 

 

로직

설명하기 어렵지만 설명하자면..

n에서 누적합(sum)을 빼고 3의 현재 배수(now)로 나눈 값이 3의 전의 배수(before)보다 (0보다 크지만 before보단 작다, before보단 크지만 before의 2배보다 작다 , before의 2배보다 크거나 0과 같다.)에 따라 1, 2, 4가 추가되고 만약 sum+now가 n보다 크다면 종료된다.

 

예를 들어서 보면 아래와 같다. (n = 15, sum = 0)

now = 3의 1의 배수 = 3

before = 3의 0의 배수 = 1

(n-sum)이 before의 값에 따라 1, 2, 4 중 하나로 설정된다.

만약 now+sum가 n보다 크다면 종료, 아니라면 now의 인덱스 증가, sum += now

 

 

 

코드

import java.util.*;
class Solution {
    public String solution(int n) {
        StringBuilder sb = new StringBuilder();
        int index = 1;
        while(true){
            int bef = (int)Math.pow(3, index-1);
            int now = (int)Math.pow(3, index);
            int left = n%now;
            if(left == 0){
                sb.append("4");
            }
            else if(left <= bef){
                sb.append("1");
            }
            else if(left <= 2*bef){
                sb.append("2");
            }
            else{
                sb.append("4");
            }
            index += 1;
            n -= now;
            if(n <= 0){
                break;
            }
        }
        return sb.reverse().toString();
    }
}

 

 

import java.util.*;
class Solution {
    public String solution(int n) {
        StringBuilder answer = new StringBuilder();
        int index = 1;
        int sum = 0;
        while(true){
            int now = (int)Math.pow(3, index);
            int bef = (int)Math.pow(3, index-1);
            int left = (n-sum) % now;
            if(left <= bef && left > 0){
                answer.append("1");
            }
            if(left > bef && left <= 2*bef){
                answer.append("2");
            }
            if(left > 2*bef | left == 0){
                answer.append("4");
            }
            if(n <= (sum+now)){
                break;
            }
            index += 1;
            sum += now;
        }
        answer.reverse();
        return answer.toString();
    }
}

 

class Solution {
    public String solution(int n) {
        StringBuilder answer = new StringBuilder();
        String[] check = {"4", "1", "2"};
        while(n > 0){
            answer.append(check[n%3]);
            n = (n-1)/3;
        }
        answer.reverse();
        return answer.toString();
    }
}