[PG_LV2] 124 나라의 숫자

Pavel_Dmr·2022년 6월 22일

Programmers LEVEL 2

목록 보기
3/5

🌯 내가 푼 답

10진법 숫자을 특정 요구조건에 맞춰, 변환하는 문제이다. 진법 변환과 비슷해보이는데, 규칙이 약간 변형 되어있다. 나머지나 모듈러 연산에 대한 이해가 약간 있으면, 이해하기 쉽다.

기본적으로 124 규칙은 3진법과 비슷해보이는데, 다른점은 10진법 3은 3진법으로 10이지만, 여기서는 4로 표현한다. 기본 진법 규칙에 변형되있음을 확인 할 수 있다.

1 mod 3 = 1 (value 1)
2 mod 3 = 2 (value 2)
3 mod 3 = 0 (value 4)

모듈러 연산에 따라 나머지가 나오는 경우의수는 3가지이고, 나머지가 0일때, 값이 4가 된다.

    private void Sample()
    {
        // ! ---------------------------------------------------

        // 나머지 값에 맞춰서 인덱스 순서를 배치해주었다
        String[] oneTowFour =
        { "4", "1", "2" };

        String answer = ""; // 문자열로 반환

        while (n > 0)
        {
        // 나머지 값을 기준으로 값을 answer에 넣어준다.
            answer = oneTowFour[n % 3] + answer;
            n = (n % 3 == 0) ? n / 3 - 1 : (int) Math.floor(n / 3);
        }

        return answer;

    }

n mod 3 = 0 일때, n을 3으로 나눈것에 -1을 하는데, n이 정수로 나눠지지 않는 상황에서는 기본 3진법처럼 3으로 나누어도 값이 잘나온다. n = 9 일때 24 , n = 12 일때 44인데,
-1을 해주지 않으면 n = 9 일때 44 , n = 12일때 114이 된다. 보다시피 값이 한칸씩 밀려나기 때문에, 한칸씩 땡겨줘야 하므로, -1을 해줘야한다..

🍖 다른 사람이 푼 답

class Solution {
  public String solution(int n) {
      String[] num = {"4","1","2"};
      String answer = "";

      while(n > 0){
          answer = num[n % 3] + answer;
          n = (n - 1) / 3;
      }
      return answer;
  }
}

n 값 자체을 -1 감소 시키고 3으로 나누는 식으로 조건에 부합하는 값을 만들었다.

profile
노는게 좋아

0개의 댓글