티스토리 뷰
이번 포스팅은 백준 알고리즘 사이트의 4673번 셀프 넘버 문제를 Python 언어로 코딩해보도록 하겠습니다. 아래 url로 접속하시면 문제를 볼 수 있습니다.
https://www.acmicpc.net/problem/4673
이번 포스팅은 새로운 단계인 함수 사용하기 단계의 첫 문제입니다.
이 문제의 경우 입력 없이 함수를 사용해 10000까지의 셀프 넘버를 모두 출력하는 문제입니다. 셀프 넘버란 생성자 없이 존재하는 수로 아래 그림을 보시면 이해하는데 도움이 될 것 같습니다.
숫자 2는 1을 통해 만들어지고, 숫자 4는 2를 통해 만들어지기에 셀프 넘버가 아닙니다. 그렇다면 10 이하의 수에서는 1, 3, 5, 7, 9가 대표적인 셀프 넘버가 될 것입니다. 이런식으로 10000까지의 모든 셀프 넘버를 출력하면 됩니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
def self_num():
arr=list()
res=0
for i in range(1, 10001):
if i < 10:
res = i+i
arr.append(res)
elif i < 100:
res = i+(i//10)+(i%10)
arr.append(res)
elif i < 1000:
res = i+(i//100)+((i%100)//10)+((i%100)%10)
arr.append(res)
elif i < 10000:
res = i+(i//1000)+((i%1000)//100)+(((i%1000)%100)//10)+(((i%1000)%100)%10)
if res <= 10000:
arr.append(res)
arr.sort()
arr1 = [i for i in range(1,10001)]
notSelf = [item for item in arr1 if item not in arr]
for each in notSelf:
print(each)
self_num()
|
이 문제는 함수 사용하기 단계의 문제기에 self_num()이라는 함수를 정의해줍니다. self_num() 함수는 arr라는 list와, 셀프 넘버인지를 구하기 위한 res 변수가 있습니다.
for문을 1부터 10000까지 반복하고 if/elif문을 이용해 각 자리수에 따라 조건을 설정해주었습니다. 자리수의 차이로 if문을 나누었기에 코드 동작 방식이 동일하여 11라인의 elif문을 대표적으로 보여드리도록 하겠습니다. 11라인은 1000이하의 i의 조건으로 3자리 수를 통한 셀프 넘버를 구하기 위한 코드입니다.
res에 i+(i//100)+((i%100)//10)+((i%100)%10) 값을 넣어주는데, 이는 i값에 i값 각 자리수를 더하는 코드입니다. 예를 들어 i가 365면 res에는 365+3+6+5로 379가 저장되게 되는 것입니다.
res 값을 구했으면 만들어놨던 arr에 res값을 차례로 추가합니다. 즉 arr에는 셀프넘버가 아닌 수가 저장을 하고, 18라인의 arr.sort() 함수를 통해 arr에 저장된 값을 오름차순으로 정렬해줍니다.
다른 코드 동작은 동일하지만 16라인은 예외 처리를 한 번 더 해주었습니다. 10000을 생성자로 셀프넘버까지 다 구하기에 res값이 10000이 넘지 않을 때까지만 arr에 res를 추가하여줍니다.
19라인과 20라인은 셀프 넘버인 수를 골라 내기 위한 코드로, 1부터 10000까지를 arr1에 넣어줍니다. 그리고 notSelf를 통해 arr1에 있는 수 중 arr에 있지 않은 수를 notSelf에 list형식으로 저장해줍니다. 이후 21라인을 통해 notSelf에 있는 모든 값을 출력하는 코드로 함수 작성을 마칠 수 있습니다.
24라인은 self_num() 함수를 호출하는 것으로 문제를 해결하는 코드를 작성해보았습니다.
다음 포스팅에서는 다음 문제를 풀어보도록 하겠습니다.
다음 포스팅에서 봐요 :))
'BaekJoon > Python' 카테고리의 다른 글
[BaekJoon/Python3] 백준 2588번 곱셈 (0) | 2019.12.24 |
---|---|
[BaekJoon/Python3] 백준 1065번 한수 (0) | 2019.05.29 |
[BaekJoon/Python3] 백준 1110번 더하기 사이클 (0) | 2019.05.18 |
[BaekJoon/Python3] 백준 4344번 평균은 넘겠지 (0) | 2019.05.18 |
[BaekJoon/Python3] 백준 1546번 평균 (0) | 2019.04.08 |
- Total
- Today
- Yesterday
- GIT
- 승인 후기
- 구글 애드센스 설치
- 백준
- Ubuntu 18.04
- github
- ubuntu 18.04 LTS
- python 코딩
- Git Bash
- Python 언어
- 구글 애드센스 후기
- 구글 애드센스 승인
- 백준 코딩
- Google Adsense
- C 코딩
- c
- C 언어
- 백준 알고리즘
- 구글
- 구글 애드센스
- ubuntu
- Oldzombie
- python
- 우분투
- tistory blog
- 웹해킹
- webhacking.kr
- webhacking
- 우분투 18.04
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |