supremest.35 개발 블로그

[프로그래머스] 124 나라의 숫자 본문

Study/코테연습

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

supremest.35 2021. 4. 15. 16:21
해당문제

 

( 코딩학원 강사를 그만두고 국비지원 교육 듣는 초반에는 잘 풀었던 것 같은데, 요새는 문제 이해를 잘 못하겠다..)

 


지문 파악

10진법 124나라 10진법 124나라
1 1 6 14
2 2 7 21
3 4 8 22
4 11 9 24
5 12 10 41

 

  • 자연수 n이 매개변수로 주어질 때, n을 124 나라에서 사용하는 숫자로 바꾼 값을 리턴하도록 하는 문제.
  • 124 나라에는 자연수만 존재하며 모든 수를 표현할 때 위의 표와 같이 1, 2, 4만 사용한다.

 


 

문제 풀이(Java)

  • 인수분해를 통해 3진법 표기와 비슷하다는걸 알 수 있다.
10진법 3진법 124 나라
1 1 1
2 2 2
3 10 4
4 11 11
5 12 12
6 20 14
9 100 24
15 120 114

 

- 3진법 표기법

  • 3으로 나눈 나머지가 0일 때는 0으로 표시
  • 3으로 나눈 나머지가 1일 때는 1로 표시
  • 3으로 나눈 나머지가 2일 때는 2로 표시

 

- 124 나라 표기법

  • 나머지가 1일 때와 2일 때는 3진법 표기와 같음
  • 처음에는 나머지가 0일 때, 즉 나누어 떨어졌을 때는 4로 표시되어야 한다고 생각함
  • 그런데 3일 때, 3진법 표기는 10 이기 때문에, 내가 이해한 124나라 표기법으로 표현한다면 24로 표현된다 (오답)

 

** 우리가 알고 있는 n진수는 0 ~ n-1 의 숫자로 표현되는 표현법이다. 124 나라에서는 0이 없으므로 3의 배수가 되었을 때 자릿수가 1 증가하는 것이 아니다. 따라서 몫에서 1을 빼준다.

class Solution {
    public String solution(int n) {
        
        String answer = "";
        
        while (n > 0) {
            int remainder = n%3;
            n /= 3;
            
            if (remainder == 0) {
                answer = "4" + answer;
                n--;    
            } else if (remainder == 1) {
                answer = "1" + answer;
            } else if (remainder == 2) {
                answer = "2" + answer;
            }
        }
        return answer;
    }
}

 

처음에는 위의 코드와 다르게 3으로 나눈 나머지가 1, 2인 표현법과 124 나라에서 표현하는 표현법이 같기 때문에 else if 두개를 쓰지 않고 else 문으로 합쳐서 answer = remainder + answer; 이라고 표현했다.

 

테스트 코드도 맞고 정확성도 맞았지만 효율성에서 점수를 얻지 못했다.

내가 생각한 이유는 remainder은 정수고 answer는 문자열이다.

정수 + 문자열 -> 문자열으로 자동 변환되는 것으로 알고 있는데 아마 이 과정이 효율적이지 않아 점수를 얻지 못한 것 같다. 

 

 

참고 페이지 :

https://minnnne.tistory.com/66

https://velog.io/@dramatic/Algorithm-124-%EB%82%98%EB%9D%BC%EC%9D%98-%EC%88%AB%EC%9E%90

'Study > 코테연습' 카테고리의 다른 글

[프로그래머스] 문자열 압축  (0) 2021.04.24
[프로그래머스] 프린터  (0) 2021.04.21
[프로그래머스] 기능개발  (0) 2021.04.16
[프로그래머스] 스택/큐 - 주식가격  (0) 2021.04.06