걸림돌
- 셀프 넘버를 찾아내는 알고리즘을 짜지 못했음
- 집합과 리스트에 대해 파악하는데 시간이 좀 걸림
- ex) set(), add 등등
- 집합으로 만들어진 코드를 리스트로 다시 코딩하는데 기능 구현하기가 어려웠음
- ex) 논셀프넘버 찾기, 변수 self_nums에 셀프넘버만 넣는 기능 등
코드
# 자연수를 natural_num에 넣고 논셀프넘버를 create_num에 넣음
natural_num = set(range(1,10001))
create_num = set()
# create_num에 논셀프넘버들을 넣음
for i in range (1, 10001):
for j in (str(i)):
i += int(j)
create_num.add(i)
#self_num에 자연수에서 논셀프넘버를 뺀 숫자들(셀프넘버들)을 넣고 정렬시킴
# -> 순차적으로 출력해야하기 때문
self_num = sorted(natural_num - create_num)
for i in self_num:
print(i)
※ 위의 코드는 집합으로 만들어진 코드 ※
- set()을 사용하여 natural_num(자연수를 넣는 변수)와 create_num(논셀프 넘버를 넣는 변수) 집합들을 선언
- 1 부터 10000 까지 반복하는 for문 안에 1 부터 10000 까지 문자열로 바꾼 후 인덱스에 저장하고 j로 넣어주는 for문을 넣음
- 2번의 for문들이 1 부터 10000 까지 인덱스에 저장된 숫자들을 더해서 논셀프 넘버를 create_num에 add를 사용해서 넣어줌
- self_num에 자연수(1~10000)에서 논셀프 넘버를 뺀 숫자들을 넣고 sorted 내장함수를 사용해서 정렬해서 출력해줌
# 1부터 10,000까지의 자연수를 생성하고 리스트로 저장
natural_nums = list(range(1, 10001))
non_self_nums = []
# 1부터 10,000까지의 숫자 중에서 논셀프 넘버를 찾음
for i in range(1, 10001):
temp = i
for j in str(i):
temp += int(j)
if temp <= 10000:
non_self_nums.append(temp)
# 셀프 넘버 숫자를 찾기 위해 자연수 리스트에서 논셀프 넘버를 제거
non_self_nums = set(non_self_nums)
self_nums = [num for num in natural_nums if num not in non_self_nums]
# 결과 출력
for num in sorted(self_nums):
print(num)
※ 위의 코드는 집합으로 코딩 된 코드를 리스트를 사용해서 다시 코딩한 코드임 ※
for i in range(1, 10001):
temp = i
for j in str(i):
temp += int(j)
if temp <= 10000:
non_self_nums.append(temp)
위 코드는 논셀프 넘버를 찾는 코드이다
집합을 사용하면 중복된 원소를 허용하지 않기 때문에 간단하게 만들 수 있지만 리스트를 사용할 경우 중복된 원소를 허용하기 때문에 temp = i 와 if temp <= 10000: 이 두 개의 코드가 있어야한다.
self_nums = [num for num in natural_nums if num not in non_self_nums]
위 코드는 처음 보면 난해할 수 있지만 막상 자세히 살펴보면 별거아니다
- self_nums라는 변수에 num을 추가하려고 하는데 num에 for를 붙여 추가적인 조건을 넣는다
- num은 num인데 natural_nums 안에 있는 num이다
- 그리고 그 num이 if조건문을 통해 non_self_nums(논셀프넘버)가 아니면 self_nums에 들어갈 num의 자격을 얻는다
- 위의 말들은 즉 self_nums에 natural_nums에 있는 수들 중 non_self_nums를 제외한 숫자들 즉 셀프넘버들을 넣는 것이다.
채점 결과를 보면 리스트로 만든 코드가 집합으로 만든 코드보다 컴파일 시간이 조금 더 긴 것을 볼 수 있다 집합보다 코드에 들어간 요소가 많아서 그런 것 같다.
이 문제를 풀고 알게된 점
- 집합과 리스트의 차이점에 대해 어느정도 파악하게 되었다
- 집합에서 자주 사용하는 내장 함수인 sorted와 add에 알게되었다
- - sorted()는 정렬해주는 함수이고 add는 리스트에서 append와 비슷한 역할을 하는 함수이다
'BeakJoon > Python' 카테고리의 다른 글
[Python] 백준 #1316번 : 그룹 단어 체커 (S-V) (0) | 2023.11.08 |
---|---|
[Python] 백준 #1402번 : 아무래도이문제는A번난이도인것같다 (1) | 2023.10.24 |
[Python] 백준 #1032번 : 명령 프롬프트 (0) | 2023.10.15 |
[Python] 백준 #10828번 : 스택 (0) | 2023.10.15 |
[Python] 백준 #10809 : 알파벳 찾기 (0) | 2023.10.01 |