프로그래머스 | LV.2 124 나라의 숫자 - 구현 문풀 (Java)

728x90

⬛ 프로그래머스 | LV.2 124 나라의 숫자 - 구현 문풀 (Java)

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

 

프로그래머스

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

programmers.co.kr

문제 설명


💚문제 접근 방식

이런 문제가 어렵다 …

당연히 규칙성 있을 거라 생각했고 데이터 크기가 매우 크기때문에 효율성도 생각해줘야 되는 문제이다.

일단 처음 든 생각은 ( 1, 2, 4 ) 3가지가 반복되기 때문에 3으로 값을 나눠야 한다는 것 ?

그런데 문제는 반복이 되더라도 각 자릿수를 어떻게 특정할지.. 몫을 나눈다고 하더라도 그게 어떻게 124 규칙대로 값을 만드는지 규칙을 도저히 못찾겠었다 ..

결국 풀이를 봤는데 풀이는 간단하지만 이런 류의 문제가 어려운 것은 .. 그런 규칙성을 직접 찾기 쉽지 않다는 것 때문인 듯 하다 .

1) List 를 String 타입으로 선언하여 4, 1, 2, 순으로 담는다.

  • 이렇게 담는 이유는 n % 3의 나머지가 0일 때는 4가 와야 하고, 1일 때는 1, 2일 떄는 2가 와야 하기 때문이다.

2) while문을 n>0 인 동안 돌면서 매번 String 타입의 answer에 대해 앞에는 list 상의 idx(n%3)번째 값을 담고, answer를 붙여준다.

  • 그런데 이때 n = (n-1) / 3 을 해주는 게 핵심이다. 3의 배수는 자릿수가 하나씩 올라가기 떄문에 n-1을 해주어 이를 보정해줘야 된다는 것이다. .. 이거 넘 어렵다 ㅜ

💚 제출 코드

import java.util.*;
class Solution {
    //솔루션 함수 
    public String solution(int n) {
        String answer = "";
        
        List<String> nums = Arrays.asList("4", "1", "2");
        
        while(n  > 0){
            answer = nums.get(n%3) + answer;
            n = (n-1) /3;
        }
        
        return answer;
    }
}
728x90