-
백준 1065 한수 파이썬IT/알고리즘 2022. 2. 24. 01:15728x90
풀이
def hansu(n) : cnt = 0 for i in range(1, n+1) : if 0 < i < 100 : cnt +=1 else : a = i//100 b = (i%100)//10 c = (i%100)%10 if (a-b) == (b-c): cnt +=1 return(cnt) num = int(input()) print(hansu(num))
사실 문제도 이해가 어려워 블로그 탐색 후 문제 이해했음. 그리고 시작.
가장 이해하기 쉬웠던 블로그는 아래의 블로그였다.
https://gabii.tistory.com/entry/BaekJoonPython3-%EB%B0%B1%EC%A4%80-1065%EB%B2%88-%ED%95%9C%EC%88%98
말로 설명해보자.
일단 문제 자체가 이해하기 어렵다.
문제가 말하는 건 이런거다.
123이라는 숫자가 주어졌을 때 1부터 123까지중에서,
예를들면 123은 100의자리 1과 10의자리 2, 1의 자리 3로 보았을 때 모두 1의 등차수열을 이루므로 123은 한수이다.
1부터 99까지는 등차를 알 수 없으므로, 모두 한수이다.
그리고 등차수열이 되는 수 모두를 카운트하라는 것.
def hansu(n) : cnt = 0 for i in range(1, n+1) : if 0 < i < 100 : cnt +=1
hansu(n) 의 함수를 정의해준다.
한수가 몇 개인지 카운트 하기위해 cnt 변수 만들고,
for 문을 이용한다.
범위는 1부터 입력한 n의 값까지( 파이썬 range 함수 뒤에숫자는 포함하지 않기에 n+1을 해주었다)
위에서 언급했듯 , 1부터 99까지는 등차를 알 수 없으므로, 모두 한수이므로
i가 0<i<100 의 범위에 있을때는 무조건 카운트 해주었다.
else : a = i//100 b = (i%100)//10 c = (i%100)%10 if (a-b) == (b-c): cnt +=1 return(cnt)
그리고 아닐 시, 말그대로 저 범위가 아닌것에 대해선
100의 자리, 10의 자리, 1의 자리를 a, b, c 함수에 나누어 담았는데
나누고 난 후의 몫과 나머지를 파악하면 왜 a, b, c가 100의 자리, 10의자리, 1의자리인지 알 수 있다.
그리고 나서 한수의 조건인 각 항목의 등차수열이 같을때,
카운트 +=1 을 해주고
최종적으로 값을 반환한다.
'IT > 알고리즘' 카테고리의 다른 글
백준 10809 알파벳 찾기 파이썬 (0) 2022.02.25 백준 11720 숫자의 합 파이썬 (0) 2022.02.24 백준 4673 셀프 넘버 파이썬 (0) 2022.02.23 백준 4344 파이썬 평균은 넘겠지 (0) 2022.02.22 백준 8958 OX퀴즈 파이썬 (0) 2022.02.21