위 문제가 요구하는 점을 요약해보면,
1. 666이 들어가는 수를 순서대로 나열한다.
2. 숫자 N를 입력받고, N번째 666이 들어가는 수를 출력하라.
ex) 수 순서는 666, 1666, 2666, 3666, 4666, 5666, 6660, 6661, ...
1. 문제 해결 방법
필자는 우선 경우의 수를 나누어 문제를 해결하고자 하였다. 우선 뒤에 세자리를 제외시킨 후, 앞에 붙는 숫자가
1. 뒤 세자리가 6인지
2. 뒤 두자리가 6인지
3. 뒤 한자리가 6인지
이 조건을 통해 문제가 요구하는 수의 순서를 계산하고자 하였다. 이렇게 코딩한 결과, 테스트 케이스를 비롯한 몇 가지 상황에서는 알맞는 결과가 나왔으나, 반례가 더 있는 듯 하여 문제 해결에 실패하였다.
결국 구글링을 해본 결과, 666에서 1씩 더하고, 그 값에 '666'이 포함되어있다면 횟수를 1 올리는 방법으로 생각할 시, 프로그램에 좀 무거워질 수 있으나, 짧게 해결할 수 있다는 것을 깨달았다.
때로는 조금 무거워 지더라도 간단하게 생각하는 것이, 오히려 짧고 직관적인 코드로 문제를 해결할 수 있다는 사실을 알게 된 것 같다.
2. 정답 코드
n = int(input())
cnt = 0
six_n = 666
while True:
if '666' in str(six_n):
cnt += 1
if cnt == n:
print(six_n)
break
six_n += 1
'백준' 카테고리의 다른 글
[백준]4673. 셀프 넘버 (파이썬, python) (0) | 2021.11.17 |
---|---|
[백준]10989. 수 정렬하기 3(카운팅 정렬) (0) | 2021.03.03 |
[백준]7568. 덩치 문제풀이 (파이썬, python) (0) | 2021.02.17 |
[백준]11729. 하노이 탑 이동 순서 문제풀이 (파이썬, python) (0) | 2021.02.14 |
[백준]2447. 별 찍기 - 10 문제풀이 (파이썬, python) (2) | 2021.02.14 |
댓글