본문 바로가기
PS/프로그래머스

[프로그래머스 *Java] - 124 나라의 숫자

by Jman 2022. 7. 4.

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

 

코딩테스트 연습 - 124 나라의 숫자

 

programmers.co.kr


조건

제한 시간 : 1시간 이내

 

한 번 풀었던 문제였다.

처음 풀 때는 시간을 넉넉히 잡고 푸는 데에만 초점을 두고 풀어서  풀긴 했다.

규칙을 찾기 위해서 계속 써 내려가면서 접근을 했고, 결국 풀었다

 

이번에는 시간 제한을 두고 풀었다. 하지만, 시간내에 풀지 못했고 접근방식이 잘못 됐었다. 예외처리 해줘야하는 상황이 많아져서 그만 풀고 기존에 풀었던 내 방식을 다시 참고했다.

 

실패했던 접근방식은

HashMap 을 가지고 10진법을 3진법으로 변환 한 뒤? 각 숫자를 String.charAt 을 통하여 값을 하나씩 뽑아와서

hs.put('0', '4');

hs.put('4', '2');

hs.put('2', '1');

hs.put('1', '4');

이런 식으로 미리 값을 넣어두고, 변환을 해줄 생각을 하였음.

변환하는 방식은 

charAt(i + 1) 이 0 일경우 i 번째에 위치한 값을 HashMap 접근하여 value 값으로 변환하는 방식이다.

ex) 
9(10)를  3진법으로 변환
-> 100(3)
-> 40
-> 24
결과는 24

이런 식으로 로직을 설계했지만, 0이 연달아 나올 경우에서 예외상황이 발생했고, 로직은 더 복잡해져서 기존 풀이방법을 참고하였다.

 

Java

import java.util.*;

class Solution {
    public String solution(int n) {
        StringBuilder convert124Scale = new StringBuilder();
         while(n != 0) {
            int remainder = n % 3;
            if (remainder == 0) {
                remainder = 4;
                convert124Scale.append(remainder);
                n = (n / 3) - 1;
            }else {
                convert124Scale.append(remainder);
                n /= 3;
            }
        }
        
        return convert124Scale.reverse().toString(); 
    }
}