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이 매개변수로 주어질 때, n을 124 나라에서 사용하는 숫자로 바꾼 값을 return 하도록 solution 함수를 완성해 주세요.
제한사항
n은 50,000,000이하의 자연수 입니다.
입출력 예
n | result |
1 | 1 |
2 | 2 |
3 | 4 |
4 | 11 |
[문제분석]
10진수는 0부터 9를 사용하지만 124 나라에서는 1, 2, 4 이렇게 세 개의 숫자만 사용한다.
10진수인 n을 124 나라의 숫자로 바꿔야 한다. 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 감소해주어야 한다.
[정리]
반복 구조로 10진수를 증가시키면 시간이 오래 걸려 채점에서 실패할 수 있다.
그래서 3을 나누는 방법으로 접근해보았다. 그런데 테스트하다 보면 숫자가 1부터 시작되어 자리 올림의 개념이 기존의 통념과 다르다는 것을 알게 된다.
이 문제의 핵심은 자리 올림의 개념이 새로운 것인데 분석하여 이것의 규칙을 찾는 것이다.
3의 배수보다 1이 클 때 자리 올림이 일어나므로 정확히 3의 배수일 때는 몫의 값을 다시 1 감소 해줌으로써 124 나라의 특이한 자리 올림을 표현하였다.
'코딩테스트' 카테고리의 다른 글
[프로그래머스] 행렬 테두리 회전하기 - 파이썬 (0) | 2023.01.07 |
---|---|
[프로그래머스] 크레인 인형뽑기 게임 - 자바 (1) | 2022.12.26 |
[프로그래머스] 성격 유형 검사하기 - 파이썬 (1) | 2022.12.18 |
[프로그래머스] 문자열 나누기 - 파이썬 (0) | 2022.12.17 |
[프로그래머스] 신고 결과 받기 - 파이썬 (0) | 2022.12.17 |