알고리즘 문제 풀기

[프로그래머스 12899] 124 나라의 숫자 (java)

Solu- 2021. 4. 20. 13:12

링크 : programmers.co.kr/learn/courses/30/lessons/12899

 

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

 

programmers.co.kr

나의 코드

class Solution {
    public String solution(int n) {
        String answer = "";
        int na; // 나머지를 저장할 변수

        while(n != 0) {
            na = n % 3;
            n = n / 3;

            if (na == 0) {
                // 나누어 떨어질 경우
                answer = "4" + answer;
                n--;
            }
            else if (na == 1) {
                answer = "1" + answer;
            }
            else if (na == 2) {
                answer = "2" + answer;
            }
        }

        return answer;
    }
}

처음에는 단순한 숫자 교체로만 이해해서, 다양한 예제 및 큰 숫자까지 생각하질 못했다. 이 문제에서 착각하면 안되는 것은 11 => 42, 12 => 44, 13 => 111이 된다는 것이다. 즉 3진법과 비스무리 하게 진행하는것만 이해했으면 조금 빨리 해결했을지도 모른다. 나누어떨어질 때를 제외하곤 3진법과 동일하게 진행한다.

문제에 대한 이해도가 부족해서 많은 시간을 낭비한 스스로에게 좀 더 고생하라고 격려해주고 싶다..

cpp 코드이지만 설명이 이해하기 좋아 링크를 첨부한다.

minnnne.tistory.com/66

 

프로그래머스 - 124 나라의 숫자(Level 2)/Wanna Be 컴잘알

문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/12899 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이..

minnnne.tistory.com

 

모범 답안

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;
    }
}

이 깔끔하고 간결한 코드를 보고 감탄했다. 나누어 떨어질 때 (나머지 == 0일 때)에 대한 처리를 Stirng[]을 통해 간단하게 처리했으며, 몫을 1 줄여주는 로직은 n-1을 통해 생략했다.