코딩테스트

[프로그래머스] 124 나라의 숫자 - 파이썬

swedu 2022. 12. 25. 17:48
728x90
반응형

2022.12.25. 최초 작성

 

 

Lv2.

 

출처 : https://school.programmers.co.kr/learn/courses/30/lessons/12899?language=python3 

 

프로그래머스

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

programmers.co.kr

 

 

 

문제 설명

124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다.

 

124 나라에는 자연수만 존재합니다.

124 나라에는 모든 수를 표현할 때 1, 2, 4만 사용합니다.

예를 들어서 124 나라에서 사용하는 숫자는 다음과 같이 변환됩니다.

 

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이 매개변수로 주어질 때, n124 나라에서 사용하는 숫자로 바꾼 값을 return 하도록 solution 함수를 완성해 주세요.

 

제한사항

n50,000,000이하의 자연수 입니다.

 

 

입출력 예

n result
1 1
2 2
3 4
4 11

 

 

 


 

 

[문제분석]

10진수는 0부터 9를 사용하지만 124 나라에서는 1, 2, 4 이렇게 세 개의 숫자만 사용한다.

10진수인 n124 나라의 숫자로 바꿔야 한다. answer 값은 문자열이다.

124 나라의 숫자는 자리 올림이 10진수의 방식과 다르다.

 

 

[접근 방법]

반복 구조로 10진수를 1씩 증가시키며 124 나라의 숫자도 같이 증가시키는 것은 비효율적으로 판단된다.

124 나라의 숫자는 3개이므로 10진수를 3으로 나누어 몫과 나머지를 이용하는 방식으로 접근하는 것이 좋다.

 

규칙을 정리하면 아래와 같다.

 

나머지가 0이면 124 나라의 마지막 숫자는 4이다.

나머지가 1이면 124 나라의 마지막 숫자는 1이다.

나머지가 2이면 124 나라의 마지막 숫자는 2이다.

 

10진수를 3으로 나눈 나머지 값인 0, 1, 2는 리스트의 번지로 사용하기로 한다.

아래처럼 10진수를 3으로 나눈 나머지 값에 대응되는 124 나라의 숫자를 리스트에 넣어 관리한다.

 

s = ['4', '1', '2']

 

10진법과 124 나라의 수를 정리한 표를 분석해보면 3의 배수보다 1이 클 때 자리 올림이 발생한다는 것을 알 수 있다.

 

 

 

[주의사항]

10진수와 124 나라의 숫자는 0부터 시작하는 것이 아니라 1부터 시작한다. 그래서 자리 올림 개념으로 접근하면 규칙이 맞지 않는다.

그래서 10진수를 3으로 나누었을 때 몫과 나머지가 124 나라의 숫자로 바꿀 때 어떤 규칙이 있는지 집중적으로 분석할 필요가 있다.

 

 

 

 

[풀이 코드]

규칙을 정리하면 아래와 같다.

 

규칙 1 : 10진수를 3으로 나누어서 몫이 0이면 나머지 값에 대응되는 124 나라의 마지막 숫자를 구한다.

규칙 2 : 10진수가 3의 배수보다 1이 클 때 자리 올림이 발생하므로 정확히 3의 배수일 때는 몫의 값을 1 감소해주어야 한다.

 

[그림1] 풀이 코드

 

 

 

 

[정리]

반복 구조로 10진수를 증가시키면 시간이 오래 걸려 채점에서 실패할 수 있다.

그래서 3을 나누는 방법으로 접근해보았다. 그런데 테스트하다 보면 숫자가 1부터 시작되어 자리 올림의 개념이 기존의 통념과 다르다는 것을 알게 된다.

 

이 문제의 핵심은 자리 올림의 개념이 새로운 것인데 분석하여 이것의 규칙을 찾는 것이다.

 

3의 배수보다 1이 클 때 자리 올림이 일어나므로 정확히 3의 배수일 때는 몫의 값을 다시 1 감소 해줌으로써 124 나라의 특이한 자리 올림을 표현하였다.

 
728x90
반응형

 

728x90
반응형