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
'알고리즘' 카테고리의 다른 글
| 탐색(2): 이진 탐색 (0) | 2024.01.19 |
|---|---|
| 탐색(1): 깊이 우선 탐색/너비 우선 탐색 (0) | 2024.01.19 |
| 정렬: 버블 정렬/선택 정렬/삽입 정렬/퀵 정렬/병합 정렬/기수 정렬 (1) | 2024.01.05 |
| 자료구조(3): 투 포인터, 슬라이딩 윈도우, 스택과 큐 (2) | 2024.01.04 |
| 자료구조(2): 구간 합 (0) | 2024.01.03 |