https://www.acmicpc.net/problem/1065
n = int(input())
han = 0
for i in range(1, n + 1):
if i < 100: # 두자리수는 모두 등차수열, 즉 한수임
han += 1
else: # 세자리수라면
check = list(map(int, str(i))) # 리스트에 각 숫자를 저장
if check[1] - check[0] == check[2] - check[1]: # 각 자리의 차이가 같다면, 한수라면
han += 1
print(han)
코드 설명
두자리수까지는 모두 등차수열을 이룬다 따라서 100 미만은 전부 카운트를 해준다. 세자리수가 될때는 숫자를 분해하기 위해 문자열로 바꾼 값을 다시 Int 로 바꾸면서 리스트에 저장한다. 세자리수가 최대이기 때문에 첫번째와 두번째자리, 세번째와 두번째 자리의 차이가 같다면 한수가 되므로 카운트를 해준다. 이때 1000의 경우에는 한수가 될 수 없으므로 고려하지 않아도 된다. (등장하는 최대값은 1000 이다)
Point : 두자리수까지는 모두 한수이다. 세자리수부터 각 자리의 차이가 같을 시에만 카운트를 해준다.
728x90
'SW개발 > 코딩테스트' 카테고리의 다른 글
[프로그래머스]모의고사 - 완전탐색 (0) | 2021.10.11 |
---|---|
[백준]15649번 N과 M (1) - 백트래킹 (0) | 2021.02.26 |
[백준]1436번 영화감독 숌 - 완전 탐색 (0) | 2021.02.24 |
[백준]1018번 체스판 다시 칠하기 - 완전 탐색 (0) | 2021.02.23 |
[백준]7568번 덩치 - 완전 탐색 (0) | 2021.02.22 |