728x90
요즘 백준 단계별 풀어보기를 진행 중이다. 처음에는 자바를 사용하다가, 알고리즘을 풀 때 파이썬 코드가 간략해서 좋고 파이썬을 쓴 지 오래라 감이라도 잡고자 푸는 언어를 바꿨다. (이러다 또 나중에는 자바로 다시 풀어야 될 듯..ㅋㅋㅋ)
백준 1065: 한수
처음에는 한수가 뭔지도 몰랐다. 거기에 이해하기 조금 난해했던 부분은 아래와 같은 궁금증이 있었다.
연속된 두 개의 수가 등차수열인 수를 말한다는데, 그럼 한 자리 수와 두 자리 수는 모두 한수라는 건가?
아닐 거 같다는 생각에 구글링해서 찾아보니 의외로 맞았다. 즉, 1~9는 연속된 두 개의 수로 본다면 0과 1, 0과 2 ... 같이 증가하기 때문에 등차수열이고, 10~99는 1과 0, 1과 1 ... 같이 두 수밖에 없어 두 수의 차이가 일정하기 때문에 등차수열이 맞다.
한수는 왜 한수인가? 보다는 왜 한수가 아닌가?를 이해하는 것이 더 쉬운 개념이긴 하다. 그럼 한수가 아닌 100과 101을 예로 들면, 100은 연속된 두 수로 나눴을 때 1과 0 그리고 0 과 0으로 나뉜다. 이때, 1과 0은 -1만큼의 차이가 있으나, 0과 0은 0만큼의 차이로 앞선 -1만큼의 차이와 일정하지 않기 때문에 등차수열이 아니다. 101도 같은 이유이다. 1과 0, 0과 1로 나뉘는데, 1과 0은 -1만큼, 0과 1은 +1만큼의 차이로 각 자릿수 사이의 차이가 일정하지 못하기 때문에 한수가 아니다.
# 백준 1065 "한수"
n = int(input()) #입력값
ans = 0 #한수의 개수
for i in range(1, n+1):
n_list = list(map(int, str(i)))
# str(i): i를 문자열로 만들어준다. ex) 12 => '12'
# map(int, str(i)): 문자열로 되어있는 각 자릿수를 정수로 바꿔준다. ex) '12' => 1, 2
if i < 100:
ans += 1 # 1의 자리, 10의 자리의 수까지는 모두 한수에 해당하기 때문에 99까지의 수는 다 한수로 카운트한다.
elif n_list[0] - n_list[1] == n_list[1] - n_list[2]:
ans += 1 # 100의 자리와 10의자리, 10의 자리와 1의 자리의 차가 같은지 확인 후 한수를 카운트한다.
print(ans)
728x90
'알고리즘' 카테고리의 다른 글
[백준] 1157 단어 공부 (Python) (0) | 2022.07.20 |
---|---|
[백준] 2675 문자열 반복 (Python) (0) | 2022.06.09 |
[백준] 10809 알파벳 찾기 (Python) (0) | 2022.06.08 |
[백준] 11720 숫자의 합 (Python) (0) | 2022.06.07 |
[백준] 11654 아스키코드 (Python) (0) | 2022.05.24 |