travel data science
백준 4673번 문제 본문
a=set() #생성자가 있는 숫자 집합
c=[] #생성자가 없는 숫자 list
for i in range(1, 10001):
b=i+(i//1000)+((i%1000)//100)+((i%100)//10)+(i%10)
a.add(b)
for i in range(1, 10001):
c.append(i)
c=[i for i in c if i not in a]
for i in c:
print(i)
내가 푼 백준 4673번 문제..! 이때까지 푼 것 중에서 문제를 어떻게 풀어야할지 제일 고민을 많이 했던 문제 같다. 뭐랄까 수학적 사고를 하는 데 있어서 한계가 느껴졌다고 해야하나..ㅋ
이거는 for문이 너무 많이 들어가서 for문이 많이 들어가는 것 없이 해보는 방법을 찾아봤다.
def d(n:int):
return n+n//1000+(n%1000)//100+(n%100)//10+n%10
dList=[0]*10000
for n in range(10000):
try:
dList[d(n)]=1
except IndexError:
continue
for d in range(10000):
if dList[d]==0:
print(d)
나는 list를 여러개 만들었는데 여기는 0 10000개로 구성된 리스트 하나를 만들어서, 생성자가 있는 숫자의 경우 생성자가 있는 index의 0을 1로 변환한다. 만약 10000을 넘어가는 결과값이 나올 경우 index error가 나게 되는데, 이 때를 대비해서 try-except구문을 사용하였다. continue를 사용하여 다시 for문으로 넘긴다.
그렇게 해서 index가 0인(생성자가 없는) 모든 index를 print한다.
개인적으로 try-except구문과, continue, 인덱싱을 가장 잘 활용한 코드인 것 같아서 가져와봤다.
'Python study' 카테고리의 다른 글
백준 1157번 문제 (0) | 2021.10.07 |
---|---|
백준 11654번 문제(파이썬 아스키코드) (0) | 2021.10.06 |
백준 4344번 문제 (0) | 2021.10.04 |
백준 2577번 문제 (0) | 2021.10.04 |
백준 1110번 문제 (0) | 2021.10.04 |