728x90
추석이지만 코로나로 친척집에 안 가는 김에 새벽까지 문제를 풀고 있습니다.
언제쯤이면 이 판데믹이 끝날까요? 🤦♂️
설에는 마음 놓고 마스크를 벗고 돌아다니고 싶네요.
4673번: 셀프 넘버
셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때,
www.acmicpc.net
문제
셀프 넘버는 생성자가 없는 수이다.
예를 들어 10의 경우 10 + 1 + 0 = 11이 되므로 10은 11의 생성자가 된다.
1부터 10000까지 셀프넘버를 출력하는 문제이다.
풀이
셀프 넘버의 체크를 위해 1부터 10001까지 0 값을 가지는 배열을 만들어 둔다.
그리고 1부터 10000까지 반복문을 돌리면서 이 문제의 각 자리수를 더하는 함수를 실행한 뒤, 나온 수를 미리 만들어 둔 배열의 인덱스로 해서 값을 1로 변경한다. list index out of range를 피하기 위해 인덱스 값이 9999를 넘지 않도록 조건문을 걸어 준다.
마지막으로 결과 리스트에서 값이 0인 경우의 인덱스+1 을 출력한다.
코드
ans = [0]*10000 # 셀프넘버인지 체크 for i in range(10000): a = i//10000 b = i//1000 c = (i//100)%10 d = (i//10)%10 e = i%10 res = i+(a+b+c+d+e)-1 if res<=9999: ans[res] = 1 for i,v in enumerate(ans[0:10000]): if v == 0: print(i+1) # 인덱스 값이므로 1을 더해서 출력
'PS > Python' 카테고리의 다른 글
[문자열][BOJ / Python] 2941 - 크로아티아 알파벳 (0) | 2020.10.05 |
---|---|
[문자열][BOJ / Python] 1316 - 그룹 단어 체커 (0) | 2020.10.05 |
[BOJ / Python] 1759 - 암호 만들기 (0) | 2020.09.30 |
[BOJ / Python] 2812 - 크게 만들기 / 그리디 / 문제 데이터 추가 기여 (0) | 2020.09.29 |
[BOJ / Python] 5052- 전화번호 목록 / 문자열, 정렬 (0) | 2020.09.28 |
최근댓글