본문 바로가기

공부하는 것들/알고리즘

백준 2475 : 검증수

www.acmicpc.net/problem/2475

 

2475번: 검증수

컴퓨터를 제조하는 회사인 KOI 전자에서는 제조하는 컴퓨터마다 6자리의 고유번호를 매긴다. 고유번호의 처음 5자리에는 00000부터 99999까지의 수 중 하나가 주어지며 6번째 자리에는 검증수가 들

www.acmicpc.net

검증수, check digit이라고 하는 것을 정보통신 이론에서 본 적이 있다.

난이도가 낮은 문제라서 아래와 같이 풀어서 해결이 됐는데, num의 숫자가 너무 커지면 다 합할 때까지 기다렸다가 %10 하는 게 메모리에 부담이 가는 경우도 본 것 같다.

if __name__ == '__main__':
    # numbers = [0,4,2,5,6]
    numbers = list(map(int,input().split())) 
    squared = [num**2 for num in numbers]
    print(sum(squared)%10)

 

그래서, 짧은 식견이지만 아래와 같은 방법을 추천해본다.

if __name__ == '__main__':
    # numbers = [0,4,2,5,6]
    numbers = list(map(int,input().split())) 
    ## 매번 제곱을 할 때마다, 일의자리 수만 남겨준다.
    squared = [(num**2)%10 for num in numbers] 
    ## 일의 자리수의 합이 10이 넘어갈 수 있으니, 다시 한 번 %10을 해준다.
    print(sum(squared)%10)

 

sum의 나머지와 나머지의 sum 이 같은 이유는 다음과 같다..(코딩할 때 이런 거 아무도 언급 안하고 넘어가서 답답했던 1인...)

매번 증명하긴 어려운 부분들이 있겠지만, 능력이 닿는 안에서 해보려고 한다.

 

----  증명 넣기 ---