알고리즘
[백준 1436] 파이썬 오답노트
Codult
2024. 1. 19. 10:53
728x90
나는 N이 <= 10,000으로 주어지기 때문에, 백만 이하의 숫자에서 찾을 수 있겠다고 생각해서
for문을 돌려 7자리의 숫자에서 '666'이 포함된 모든 숫자를 구하고, 중복을 제거하여 미리 배열을 생성했다.
그럼 N을 입력받아, N-1 인덱스의 숫자를 출력하면 된다.
내가 생각해도 이건, 너무 불필요한 계산을 하게 만드는 코드라서, 바로 다른 풀이들을 찾아봤는데, 역시나 훨씬 효율적인 코드가 있었다.
(i) N>0 이 조건인 while문을 작성한다.
(i) num = 665인 숫자를 while문을 통해 +1을 해주고,
(ii) 그 결과에 '666'이라는 문자열이 포함될 때마다 N -= 1을 한다.
(iii) num을 출력한다.
>> 내 풀이
N = int(input())
numbers = []
for i in range(10):
for j in range(10):
for k in range(10):
for l in range(10):
numbers.append(i*1000000 + j*100000 + k*10000 + l*1000 + 666)
numbers.append(i*1000000 + j*100000 + k*10000 + 666*10 + l)
numbers.append(i*1000000 + j*100000 + 666*100 + k*10 + l)
numbers.append(i*1000000 + 666*1000 + j*100 + k*10 + l)
numbers.append(666*10000 + i*1000 + j*100 + k*10 + l)
results = list(set(numbers))
results.sort()
print(results[N-1])
>> 개선 코드
N = int(input())
num = 665
while N>0:
num += 1
if '666' in str(i):
N -= 1
print(num)728x90