티스토리 뷰
반응형
🎬 [백준 1436] 영화감독 숌 - "666"이 들어간 n번째 수 찾기 (Python 구현)
🔍 문제 설명
"종말의 수"란 숫자에 연속된 666이 포함된 수를 말합니다.
이 종말의 수 중에서 N번째로 작은 수를 구하는 것이 목표입니다.
📌 조건 요약:
- 입력: 정수
N - 출력: N번째 종말의 수 (예: 1 → 666, 2 → 1666, 3 → 2666...)
💡 접근 방법
🎯 목표:
숫자 중에서 '666'이 연속해서 들어간 수를 순서대로 탐색하고,
N번째로 등장하는 수를 출력한다.
🧩 단계별 접근
🧩 1단계: 배열에 종말의 수를 저장한 후 출력
아이디어
- 숫자를 666부터 하나씩 올려가며
'666'이 포함된 수를 찾아arr[]에 저장arr[k-1]을 출력
✅ 전체 코드 1: 배열 저장 방식
k = int(input())
arr = []
i = 666
while len(arr) != 10000:
if '666' in str(i):
arr.append(i)
i += 1
print(arr[k - 1])
🔍 코드 분해 설명
✅ 1. 입력 받기
k = int(input())
- 사용자로부터 몇 번째 종말의 수를 찾을지 입력받음
✅ 2. 숫자 증가하면서 검사
i = 666
arr = []
while len(arr) != 10000:
if '666' in str(i):
arr.append(i)
i += 1
666부터 시작해서 하나씩 증가하면서str(i)안에'666'이 포함되면arr에 저장- 10000개 찾을 때까지 반복
✅ 3. 출력
print(arr[k - 1])
arr는 0-indexed →k-1번째 요소 출력
🔧 개선 코드 1: 메모리 낭비 없이 구현
배열을 만들 필요가 없으므로, 찾을 때마다 count만 증가시키면 됨!
✅ 전체 코드 2: 메모리 최적화 방식
k = int(input())
i = 666
count = 0
while True:
if '666' in str(i):
count += 1
if count == k:
print(i)
break
i += 1
✅ 어떤 점이 개선되었나?
🚀 개선 코드 2: 숫자 기반 666 연속 검사 (더 빠름)
문자열 변환 없이 숫자를 직접 나눠서 검사해 속도를 개선한 버전입니다.
✅ 전체 코드 3: 정수 기반 방식
k = int(input())
def has_666(n):
consecutive = 0
while n > 0:
if n % 10 == 6:
consecutive += 1
if consecutive == 3:
return True
else:
consecutive = 0
n //= 10
return False
i = 666
count = 0
while True:
if has_666(i):
count += 1
if count == k:
print(i)
break
i += 1
🔍 코드 분해 설명
✅ 핵심 아이디어
- 문자열 변환 없이
n % 10으로 뒷자리부터 확인 6이 연속으로 세 번 나오면True반환str()호출이 없으므로 속도 개선
⚡ 성능 비교
📌 결론
- 종말의 수 문제는
str(i)또는 정수 검사로 모두 풀 수 있습니다. - 문자열 방식은 직관적이고 입문자에게 좋습니다.
- 성능 최적화가 필요한 경우 정수 기반 검사 방식이 더 유리합니다.
✅ 마무리 요약
이 글은 백준 1436번 문제를 기반으로 정리되었습니다.
필요하시면 C++ 버전, 성능 테스트 코드, 그래프 시각화 자료도 추가 제공 가능합니다. 😊
반응형
'백준 스터디' 카테고리의 다른 글
| [BOJ 1343] 폴리오미노 C++ 풀이 (0) | 2025.06.05 |
|---|---|
| 🪙 BOJ 14916번: 거스름돈 – 최소 동전 개수 구하기 C++ (1) | 2025.06.02 |
| 백준 1436번 영화감독 숌, C++ (0) | 2025.06.01 |
| 🧾 백준 2563번 색종이 문제 풀이 정리, Python (0) | 2025.06.01 |
| 색종이 넓이 계산 백준 2563, C++ (0) | 2025.06.01 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 동적 계획법
- 브루트포스
- python 알고리즘
- 코딩테스트
- 알고리즘문제풀이
- 코딩
- 백준
- c언어
- 문제 풀이
- 그리디
- HTML
- dfs
- Python
- 그리디알고리즘
- C++
- 상속
- 문제풀이
- 프로그래밍
- 알고리즘 문제풀이
- DP
- 파이썬
- 문자열처리
- 알고리즘
- 파이썬코딩
- 객체지향
- 동적계획법
- 그래프 탐색
- 프로그래머스
- 코딩 테스트
- 알고리즘기초
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
글 보관함
반응형
