검증수, 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인...)
매번 증명하긴 어려운 부분들이 있겠지만, 능력이 닿는 안에서 해보려고 한다.
---- 증명 넣기 ---
'공부하는 것들 > 알고리즘' 카테고리의 다른 글
백준 2914 : 저작권 (0) | 2021.02.18 |
---|---|
백준 2845 : 파티가 끝나고 난 뒤 (0) | 2021.02.18 |
백준 2558 : A+B-2 (백준 input 받기) (0) | 2021.02.18 |
백준 1000번 : A+B / 1001번 : A-B (0) | 2021.02.18 |
백준 1463 : 1로 만들기(DP) (0) | 2021.02.07 |