ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [λ°±μ€€] 18511 큰 수 κ΅¬μ„±ν•˜κΈ° with Python
    PS 2021. 12. 18. 19:33
    728x90
    λ°˜μ‘ν˜•

    πŸ“Œ BOJ 18511 큰 수 κ΅¬μ„±ν•˜κΈ°

    πŸ’‘ 쑰건

    1. N보닀 μž‘κ±°λ‚˜ 같은 μžμ—°μˆ˜ μ€‘μ—μ„œ, 집합 K의 μ›μ†Œλ‘œλ§Œ κ΅¬μ„±λœ κ°€μž₯ 큰 수λ₯Ό 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±.
      (10 ≀ N ≀ 100,000,000, 1 ≀ K의 μ›μ†Œμ˜ 개수 ≀ 3)

    2. K의 λͺ¨λ“  μ›μ†ŒλŠ” 1λΆ€ν„° 9κΉŒμ§€μ˜ μžμ—°μˆ˜λ‘œλ§Œ κ΅¬μ„±λœλ‹€.

    3. 첫째 쀄에 N보닀 μž‘κ±°λ‚˜ 같은 μžμ—°μˆ˜ μ€‘μ—μ„œ, K의 μ›μ†Œλ‘œλ§Œ κ΅¬μ„±λœ κ°€μž₯ 큰 수λ₯Ό 좜λ ₯

    4. 브루트포슀 μ•Œκ³ λ¦¬μ¦˜, μž¬κ·€ν•¨μˆ˜ μœ ν˜•μ˜ 문제

    πŸ–₯ μ†ŒμŠ€ μ½”λ“œ

    from sys import stdin
    from itertools import product
    
    n, k = map(str, stdin.readline().split())
    arr = list(map(int, stdin.readline().split()))
    arr.sort(reverse=True)
    le = len(n)
    res = -int(1e9)
    
    
    def solve(le):
        global res
    
        while 1:
            temp = list(product(arr, repeat=le))
            for i in temp:
                t = int(''.join(map(str, i)))
                if int(t) <= int(n):
                    res = max(res, t)
    
            if res == -int(1e9):
                le -= 1
            else:
                return res
    
    
    solve(le)
    print(res)

    πŸ”– 예제 및 μ‹€ν–‰κ²°κ³Ό

    예제

    657 3
    1 5 7

    μ‹€ν–‰κ²°κ³Ό

    577

    ⌨️ 문제 풀이

    1. n을 λ¬Έμžμ—΄λ‘œ λ°”κΎΈμ—ˆμ„ λ•Œμ˜ 길이λ₯Ό le λΌλŠ” λ³€μˆ˜μ— μ €μž₯ν•œλ‹€.

    2. n보닀 κ°™κ±°λ‚˜ μž‘μ€ μžμ—°μˆ˜ 쀑에 주어진 μˆ˜μ—΄ arr둜 λ§Œλ“€ 수 μžˆλŠ”
      μ΅œλŒ“κ°’μ„ λ§Œλ“€κΈ° μœ„ν•΄μ„œ solve() ν•¨μˆ˜ μ•ˆμ—μ„œ μˆ˜ν–‰ν•΄μ•Όν•  λ‘œμ§μ€ λ‹€μŒκ³Ό κ°™λ‹€.

        1. itertools의 product() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μˆ˜μ—΄ arr둜 λ§Œλ“€ μžˆλŠ” λͺ¨λ“  경우의 k자리의 수λ₯Ό λͺ¨λ‘ ꡬ해 λ³€μˆ˜ temp에 μ €μž₯ν•œλ‹€.
        1. temp의 μ›μ†Œλ“€μ„ ν•˜λ‚˜μ”© μˆœνšŒν•˜λ©΄μ„œ, 각 μ›μ†Œμ— ν•΄λ‹Ήν•˜λŠ” tκ°€ n보닀 μž‘κ±°λ‚˜ 같은지 ν™•μΈν•œλ‹€
        1. μœ„μ˜ 쑰건이 만쑱될 경우, κ²°κ³Όκ°’ res보닀 tκ°€ 클 경우 resλ₯Ό κ°±μ‹ ν•œλ‹€.
        1. λ§Œμ•½ tempλ₯Ό λͺ¨λ‘ μˆœνšŒν–ˆμ§€λ§Œ resκ°€ 갱신이 μ•ˆλ˜μ–΄ -int(1e9) 일 경우, le - 1
          갱신이 λ˜μ—ˆλ‹€λ©΄ resλ°˜ν™˜ν•˜κ³  좜λ ₯

    πŸ’Ύ λŠλ‚€μ 

    1. tempλ₯Ό λͺ¨λ‘ μˆœνšŒν–ˆμ„ λ•Œ resκ°€ 갱신이 μ•ˆλœ 경우λ₯Ό μ²˜λ¦¬ν•˜μ§€ λͺ»ν•΄ κ³¨μΉ˜μ•„νŒ λ‹€.
    λ°˜μ‘ν˜•

    λŒ“κΈ€

Designed by Tistory.