Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
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
Tags
more
Archives
Today
Total
관리 메뉴

travel data science

백준 4673번 문제 본문

Python study

백준 4673번 문제

가방이 2021. 10. 6. 21:26
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