λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Algorithm/λ°±μ€€(BOJ)

[ 파이썬(python) ] λ°±μ€€ 4673 - μ…€ν”„ λ„˜λ²„

by YWTechIT 2021. 5. 18.
728x90

πŸ“ λ°±μ€€ 4673 - μ…€ν”„ λ„˜λ²„

λ°±μ€€ 4673 - μ…€ν”„ λ„˜λ²„


⚑️ λ‚˜μ˜ 풀이

λ¬Έμ œλŠ” λŒ€μΆ© μ΄ν•΄λμ§€λ§Œ, 막상 μ½”λ“œλ‘œ ν‘œν˜„ν•˜λ €λ‹ˆκΉŒ λ§‰λ§‰ν–ˆλ‹€. μ‹œμž‘ λ²”μœ„λ₯Ό μ–΄λ””μ„œλΆ€ν„° μž‘μ•„μ•Ό ν•˜λŠ”μ§€λ„ 잘 λͺ°λžλŠ”데, λ§Žμ€ κ³ λ―Ό 끝에 λ‹€μŒκ³Ό 같은 방법을 μƒκ°ν–ˆλ‹€.

 

  1. μƒμ„±μžκ°€ μ—†λŠ” 숫자λ₯Ό μ…€ν”„ λ„˜λ²„λΌκ³  μΉ­ν•˜λ‹ˆκΉŒ μƒμ„±μžκ°€ μžˆλŠ” μˆ«μžλ“€μ„ κ΅¬ν•˜κ³  μƒˆλ‘œμš΄ λ¦¬μŠ€νŠΈμ— λ‹΄μ•„μ£Όμž.
  2. 전체 1 ~ 10000κΉŒμ§€μ˜ 리슀트λ₯Ό μ΄ˆκΈ°ν™”ν•˜κ³ , μƒμ„±μžκ°€ μžˆλŠ” μˆ«μžλ“€μ„ λͺ¨λ‘ λΉΌλ©΄ λ‚˜λ¨Έμ§€ 값은 λͺ¨λ‘ μ…€ν”„λ„˜λ²„κ°€ λœλ‹€.
  3. λ¬Έμ œμ— 10000보닀 μž‘κ±°λ‚˜ 같은 μ…€ν”„λ„˜λ²„λΌκ³  λ‚˜μ™€μžˆμœΌλ‹ˆκΉŒ. μ’…λ£Œ λ²”μœ„λŠ” 10000이고, μ‹œμž‘ λ²”μœ„λŠ” λ¬Έμ œμ— μ–‘μ˜ μ •μˆ˜ n에 λŒ€ν•΄ κ³„μ‚°ν•œλ‹€κ³  λ‚˜μ™€μžˆμœΌλ―€λ‘œ 1λΆ€ν„° μ‹œμž‘ν•œλ‹€.

 

또, 이와같이 μƒκ°ν–ˆμŒμ—λ„ 닡이 λ„μΆœλ˜μ§€ μ•Šμ•˜λŠ”λ° 원인은 target.append(temp)에 μžˆμ—ˆλ‹€. μ²˜μŒμ— temp+=int(i) λ°”λ‘œ 밑에닀가 ν•΄λ‹Ή μ½”λ“œλ₯Ό μ μ—ˆλŠ”λ°, μ™œ 닡이 μ•ˆ λ‚˜μ˜€μ§€?! ν•˜λ‹€κ°€ 디버깅을 ν•˜λ©΄μ„œ μ½”λ“œλ₯Ό λ‹€μ‹œλ³΄λ‹ˆκΉŒ ν•΄λ‹Ή μ½”λ“œλ₯Ό 이쀑 반볡문 제일 μ•ˆμͺ½μ—λ‹€ μ„ μ–Έν–ˆλŠ”λ°, μ΄λŠ” ν•œ 자리수λ₯Ό 더 ν•  λ•Œλ§ˆλ‹€ target에 값을 λ„£λŠ” κ²ƒμ΄μ—ˆλ‹€.

 

결둠적으둜 n의 각 자리수λ₯Ό λͺ¨λ‘ λ”ν•˜κ³  μƒˆλ‘œμš΄ λ¦¬μŠ€νŠΈμ— λ„£μ—ˆμ–΄μ•Ό ν–ˆλŠ”λ°, n의 각 자리수λ₯Ό 더할 λ•Œλ§ˆλ‹€ target에 값을 μΆ”κ°€ν–ˆμ—ˆλ‹€. 이쀑 λ°˜λ³΅λ¬Έμ„ μ‚¬μš©ν•˜λ‹ˆκΉŒ 이런 μ‹€μˆ˜λ„ ν•˜λŠ”κ΅¬λ‚˜λ₯Ό λŠκΌˆλ‹€. λ‹€μŒμ—λŠ” μ΄λŸ°μ‹€μˆ˜λ₯Ό ν•˜μ§€ 말아야지.

 

numbers = list(range(1, 10001))

target = []
for i in range(1, 10001):
    temp = i
    for j in str(temp):
        temp += int(j)
    target.append(temp)

print('\n'.join(map(str, sorted(set(numbers) - set(target)))))
λ°˜μ‘ν˜•

λŒ“κΈ€