본문 바로가기
IT/알고리즘

백준 1065 한수 파이썬

by 시작은코딩 2022. 2. 24.
반응형


풀이

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

 

[BaekJoon/Python3] 백준 1065번 한수

이번 포스팅은 백준 알고리즘 사이트의 1065번 한수 문제를 Python 언어로 코딩해보도록 하겠습니다. 아래 url로 접속하시면 문제를 볼 수 있습니다. https://www.acmicpc.net/problem/1065 이번 포스팅은 지난

gabii.tistory.com

 

말로 설명해보자.

 

일단 문제 자체가 이해하기 어렵다.

문제가 말하는 건 이런거다.

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 을 해주고

최종적으로 값을 반환한다.

반응형