[프로그래머스][LV.0] 저주의 숫자 3 | python3

2025. 2. 10. 14:34프로그래머스/LV.0

 

문제 링크: 저주의 숫자 3

 

문제 설명

문제 설명

3x 마을 사람들은 3을 저주의 숫자라고 생각하기 때문에 3의 배수와 숫자 3을 사용하지 않습니다. 3x 마을 사람들의 숫자는 다음과 같습니다.

정수 n이 매개변수로 주어질 때, n을 3x 마을에서 사용하는 숫자로 바꿔 return하도록 solution 함수를 완성해주세요.

제한사항
- 1 ≤ n ≤ 100

 


문제 풀이

저번에 풀었을 때 위의 코드로 하면 틀리고 아래 코드로 하면 맞았었는데 왜 그런지 확인을 안하고 넘어갔다.

def solution(n):
    answer = 0
    for i in range(1,n+1):
        if i%3 == 0:
            answer+=1
        elif '3' in str(i):
            answer+=1
    answer+=n
    return answer

🚨 문제점

      1. 단순히 n에 3의 배수 개수와 '3'이 포함된 개수를 더하는 방식
        • 3의 배수 개수 + 숫자에 '3'이 포함된 개수 + n을 더함.
        • 하지만 3의 배수이면서 '3'이 포함된 수를 두 번 세는 오류가 발생할 수 있음.

예제 분석

예를 들어 n = 10일 때:

ii % 3 == 0'3' in str(i)answer 증가량
1 0
2 0
3 2 (❌ 두 번 세짐)
4 0
5 0
6 1
7 0
8 0
9 1
10 0
    • 3을 2번 세고, 마지막에 n을 더하는 방식이라서 결과가 틀릴 수 있음.
def solution(n):
    answer = 0
    for i in range(n):
        answer+=1
        while answer%3 == 0 or '3' in str(answer):
            answer+=1
        # elif '3' in str(answer):
        #     answer+=1
    return answer

✅ 올바른 동작 원리

  • answer를 1씩 증가시키면서 3의 배수이거나 '3'이 포함된 숫자는 건너뜀.
  • 따라서 n번째 올바른 숫자를 정확히 찾을 수 있음.

예제 분석 (n = 10)

반복 횟수answer 값while 검사 (answer % 3 == 0 or '3' in str(answer))최종 선택
1 1 1
2 2 2
3 3 → 4 ✅ (3 % 3 == 0) 4
4 5 5
5 6 → 7 ✅ (6 % 3 == 0) 7
6 8 8
7 9 → 10 ✅ (9 % 3 == 0) 10
8 11 11
9 12 → 14 ✅ (12 % 3 == 0 and '3' in str(13)) 14
10 15 → 16 ✅ (15 % 3 == 0) 16

결과적으로 n = 10일 때 solution(n) = 16이 올바르게 계산됨.


질문하기에도 물어봤다. 답오면 정리

 

내코드

코드

 

 

 


더보기

다른사람풀이