저주의 숫자 3
2024. 8. 23. 18:00ㆍ코딩테스트 입문
https://school.programmers.co.kr/learn/courses/30/lessons/120871
문제 설명
3x 마을 사람들은 3을 저주의 숫자라고 생각하기 때문에 3의 배수와 숫자 3을 사용하지 않습니다. 3x 마을 사람들의 숫자는 다음과 같습니다.
10진법 | 3x 마을에서 쓰는 숫자 | 10진법 | 3x 마을에서 쓰는 숫자 |
1 | 1 | 6 | 8 |
2 | 2 | 7 | 10 |
3 | 4 | 8 | 11 |
4 | 5 | 9 | 14 |
5 | 7 | 10 | 16 |
정수 n이 매개변수로 주어질 때, n을 3x 마을에서 사용하는 숫자로 바꿔 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ n ≤ 100
입출력 예
n | result |
15 | 25 |
40 | 76 |
입출력 예 설명
입출력 예 #1
- 15를 3x 마을의 숫자로 변환하면 25입니다.
입출력 예 #2
- 40을 3x 마을의 숫자로 변환하면 76입니다.
이상한 규칙을 가진 마을 사람들입니다.
3과 3의 배수를 모두 제거해야 하기 때문에, 하나의 조건으로는 모두를 처리할 수 없습니다.
다행히 n이 100 이하기 때문에 그렇게 많은 수는 아니라서 리스트로 바로 해도 문제를 풀 수는 있습니다.
1. 리스트로 숫자 생성 후 인덱스로 접근
def solution(n):
# 0부터 199까지 n을 반복합니다.
# 3의 배수가 아니거나 3이 포함되지 않은 경우만 추가합니다.
numbers = [n for n in range(200) if n % 3 and '3' not in str(n)]
# 리스트의 (n - 1)번째 값을 가져옵니다.
return numbers[n - 1]
가장 간단하지만 불필요한 연산이 있을 수밖에 없습니다.
2. 이중 반복문 사용
def solution(n):
# 3x 숫자, 10진법 숫자
number, count = 0, 0
# 10진법 숫자가 n이 될 때까지 반복합니다.
while count < n:
# 3x 숫자를 증가시킵니다.
number += 1
# number가 3의 배수가 아니고
# 3이 number에 포함되지 않는다면
if number % 3 and '3' not in str(number):
# 10진법 숫자를 증가시킵니다.
count += 1
# 3x 숫자를 반환합니다.
return number
3x 숫자와 10진법 숫자를 나누어 각각 계산해주는 방법입니다.
number는 3의 배수가 아니거나 3이 포함되지 않은 경우에만, count를 증가시킵니다.
number를 반환하는 것으로 3x 숫자를 구할 수 있습니다.
'코딩테스트 입문' 카테고리의 다른 글
겹치는 선분의 길이 (0) | 2024.08.25 |
---|---|
평행 (0) | 2024.08.24 |
외계어 사전 (0) | 2024.08.22 |
삼각형의 완성조건 (2) (0) | 2024.08.21 |
안전지대 (0) | 2024.08.20 |