저주의 숫자 3

2024. 8. 23. 18:00코딩테스트 입문

https://school.programmers.co.kr/learn/courses/30/lessons/120871

 

프로그래머스

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

programmers.co.kr


문제 설명
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