deo2kim
λ§žμ™œν‹€
deo2kim
전체 방문자
였늘
μ–΄μ œ
  • λΆ„λ₯˜ 전체보기
    • CS
      • Algorithm
      • Data Structure
      • Network
      • DB
      • OS
    • Algorithm Problem
      • Python
      • JavaScript
    • Programming language
      • Python
      • JavaScript
    • Tool
      • Jquery
      • React
    • 개발
    • Infra

λΈ”λ‘œκ·Έ 메뉴

  • ν™ˆ
  • νƒœκ·Έ
  • λ°©λͺ…둝

곡지사항

인기 κΈ€

졜근 λŒ“κΈ€

졜근 κΈ€

ν‹°μŠ€ν† λ¦¬

λ°˜μ‘ν˜•
hELLO Β· Designed By μ •μƒμš°.
deo2kim

λ§žμ™œν‹€

[python] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - 단어 퍼즐(2017 νŒμŠ€νƒ€μš΄)
Algorithm Problem/Python

[python] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - 단어 퍼즐(2017 νŒμŠ€νƒ€μš΄)

2020. 9. 14. 09:36
λ°˜μ‘ν˜•

πŸ€”λ¬Έμ œ ν•΄κ²°

Lv4 | λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°

 

풀이 방법은

  • μ•žμ—μ„œ λΆ€ν„° 문자 ν•˜λ‚˜ν•˜λ‚˜ μ„ νƒν•œλ‹€. 'b', 'a', 'n', ...
  • κ·Έ 문자둜 λλ‚˜λŠ” 단어가 strs에 λ“€μ–΄μžˆλŠ”μ§€ ν™•μΈν•œλ‹€.
  • 있으면 ν˜„μž¬κΉŒμ§€ 썼던 단어 개수(dp[i])와 κ·Έ 문자λ₯Ό μ‚¬μš©ν–ˆμ„ λ•Œμ˜ 단어 개수λ₯Ό λΉ„κ΅ν•΄μ„œ μ΅œμ†Ÿκ°’μœΌλ‘œ κ°±μ‹ 
    (말이 λ„ˆλ¬΄ μ–΄λ ΅λ‹€...)
  • ["ba", "na", "n", "a"] 와 "banana"둜 ν…ŒμŠ€νŠΈ 해보면
  • 맨처음 "b"둜 λλ‚˜λŠ” λ‹¨μ–΄λŠ” μ—†μœΌλ―€λ‘œ pass
  • λ‹€μŒ "a"둜 λλ‚˜λŠ” λ‹¨μ–΄λŠ” "a"와 "ba"κ°€ μžˆλ‹€. - "na"λŠ” 쑰건에 λ§žμ§€ μ•ŠμŒ
    "a"λ₯Ό μ„ νƒν–ˆμ„ λ•ŒλŠ” 아무일도 μ—†λ‹€. why? μ²˜μŒμ— b둜 λλ‚˜λŠ” 단어가 μ—†μ–΄μ„œ 값이 λ¬΄ν•œλŒ€μΈ μƒνƒœ
    "ba"λ₯Ό μ„ νƒν•˜λ©΄ 1둜 κ°±μ‹ ν•΄μ€€λ‹€. - (단어 ν•˜λ‚˜λ§ŒμœΌλ‘œ "ba"λ₯Ό λ§Œλ“€μ—ˆλ‹€λŠ” 뜻)
  • λ‹€μŒμ€ "n"으둜 λλ‚˜λŠ” 단어 "n"이 μžˆλ‹€. 기쑴에 "ba"λ₯Ό λ§Œλ“€ λ•Œ μ΅œμ†Ÿκ°’(1개)둜 λ§Œλ“€μ—ˆμœΌλ―€λ‘œ "n"을 μΆ”κ°€ν•΄μ„œ 2개둜 "ban"을 λ§Œλ“ λ‹€λŠ” 뜻 | ν˜„μž¬ dp = [0, inf, 1, 2, ... | 맨 μ•žμ˜ 0은 λ¬΄μ‹œ
  • λ‹€μŒμ€ "a"으둜 λλ‚˜λŠ” 단어 "a"와 "na"κ°€ μžˆλ‹€. - "ba"λŠ” 쑰건에 λ§žμ§€ μ•ŠμŒ
    "a" 선택: μ•žμ—μ„œ "ban"을 λ§Œλ“€ λ•Œ 2개(dp[3])λ₯Ό 썼닀. "a"λ₯Ό μΆ”κ°€ν–ˆμœΌλ―€λ‘œ 이제 3개 dp = [0, inf, 1, 2, 3, ...
    "na" 선택: μ•žμ—μ„œ "ba"λ₯Ό λ§Œλ“€ λ•Œ 1개(dp[2])λ₯Ό 썼닀. "na"λ₯Ό μΆ”κ°€ν–ˆμœΌλ―€λ‘œ 이제 2개 dp = [0, inf, 1, 2, 2, ...
  • μ΄λ ‡κ²Œ ν•˜λ‹€λ³΄λ©΄ dp λ§ˆμ§€λ§‰μ— μ΅œμ’… κ°œμˆ˜κ°€ λ“€μ–΄κ°„λ‹€.

 

πŸ’¨ DPλŠ” μ›λž˜ μ–΄λ €μš΄λ° Lv4λΌμ„œ 더 μ–΄λ €μš΄λ“―ν•˜λ‹€...

 

πŸ’»μ†ŒμŠ€ μ½”λ“œ

def solution(strs, t):
    n = len(t)
    dp = [0] * (n + 1)
    strs = set(strs)  # set을 μ‚¬μš©ν•˜λ©΄ 탐색할 λ•Œ μ‹œκ°„λ³΅μž‘λ„ O(1)

    for i in range(1, n + 1):
        dp[i] = float('inf')  # i번째 μ‹œμž‘μ‹œ μ΅œλŒ“κ°’μœΌλ‘œ λ°”κΏ”μ€Œ(μ΅œμ†Ÿκ°’ 비ꡐλ₯Ό μœ„ν•΄)
        for k in range(1, 6):
            # 인덱슀 λ²”μœ„ λ•Œλ¬Έμ—..
            if i - k < 0:
                s = 0
            else:
                s = i - k
            if t[s:i] in strs:
                dp[i] = min(dp[i], dp[i - k] + 1)
    if dp[-1] == float('inf'):
        answer = -1
    else:
        answer = dp[-1]

    return answer

 

πŸ“•λ¬Έμ œ 확인

좜처: ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

링크: https://programmers.co.kr/learn/courses/30/lessons/12983

 

μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - 단어 퍼즐

단어 퍼즐은 μ£Όμ–΄μ§„ 단어 쑰각듀을 μ΄μš©ν•΄μ„œ μ£Όμ–΄μ§„ λ¬Έμž₯을 μ™„μ„±ν•˜λŠ” νΌμ¦μž…λ‹ˆλ‹€. μ΄λ•Œ, μ£Όμ–΄μ§„ 각 단어 쑰각듀은 각각 λ¬΄ν•œκ°œμ”© μžˆλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ μ£Όμ–΄μ§„ 단어 쑰각이 [“ba”, “na

programmers.co.kr


문제 μ„€λͺ…

단어 퍼즐은 μ£Όμ–΄μ§„ 단어 쑰각듀을 μ΄μš©ν•΄μ„œ μ£Όμ–΄μ§„ λ¬Έμž₯을 μ™„μ„±ν•˜λŠ” νΌμ¦μž…λ‹ˆλ‹€. μ΄λ•Œ, μ£Όμ–΄μ§„ 각 단어 쑰각듀은 각각 λ¬΄ν•œκ°œμ”© μžˆλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ μ£Όμ–΄μ§„ 단어 쑰각이 [“ba”, “na”, “n”, “a”]인 경우 ba, na, n, a λ‹¨μ–΄ 쑰각이 각각 λ¬΄ν•œκ°œμ”© μžˆμŠ΅λ‹ˆλ‹€. μ΄λ•Œ, λ§Œλ“€μ–΄μ•Ό ν•˜λŠ” λ¬Έμž₯이 “banana”라면 “ba”, “na”, “n”, “a”의 4개λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμž₯을 μ™„μ„±ν•  수 μžˆμ§€λ§Œ, “ba”, “na”, “na”의 3κ°œλ§Œμ„ μ‚¬μš©ν•΄λ„ “banana”λ₯Ό μ™„μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ‚¬μš© κ°€λŠ₯ν•œ 단어 쑰각듀을 λ‹΄κ³  μžˆλŠ” λ°°μ—΄ strs와 μ™„μ„±ν•΄μ•Ό ν•˜λŠ” λ¬Έμžμ—΄ tκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, μ£Όμ–΄μ§„ λ¬Έμž₯을 μ™„μ„±ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” 단어쑰각 개수의 μ΅œμ†Ÿκ°’μ„ return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄ μ£Όμ„Έμš”. λ§Œμ•½ μ£Όμ–΄μ§„ λ¬Έμž₯을 μ™„μ„±ν•˜λŠ” 것이 λΆˆκ°€λŠ₯ν•˜λ©΄ -1을 return ν•˜μ„Έμš”.

μ œν•œμ‚¬ν•­

  • strsλŠ” μ‚¬μš© κ°€λŠ₯ν•œ 단어 쑰각듀이 λ“€μ–΄μžˆλŠ” λ°°μ—΄λ‘œ, κΈΈμ΄λŠ” 1 이상 100 μ΄ν•˜μž…λ‹ˆλ‹€.
  • strs의 각 μ›μ†ŒλŠ” μ‚¬μš© κ°€λŠ₯ν•œ 단어쑰각듀이 쀑볡 없이 λ“€μ–΄μžˆμŠ΅λ‹ˆλ‹€.
  • μ‚¬μš© κ°€λŠ₯ν•œ 단어 쑰각듀은 λ¬Έμžμ—΄ ν˜•νƒœμ΄λ©°, λͺ¨λ“  단어 쑰각의 κΈΈμ΄λŠ” 1 이상 5 μ΄ν•˜μž…λ‹ˆλ‹€.
  • tλŠ” μ™„μ„±ν•΄μ•Ό ν•˜λŠ” λ¬Έμžμ—΄μ΄λ©° κΈΈμ΄λŠ” 1 이상 20,000 μ΄ν•˜μž…λ‹ˆλ‹€.
  • λͺ¨λ“  λ¬Έμžμ—΄μ€ μ•ŒνŒŒλ²³ μ†Œλ¬Έμžλ‘œλ§Œ 이루어져 μžˆμŠ΅λ‹ˆλ‹€.

μž…μΆœλ ₯ 예

strs t result
[ba,na,n,a] banana 3
[app,ap,p,l,e,ple,pp] apple 2
[ba,an,nan,ban,n] banana -1

μž…μΆœλ ₯ 예 μ„€λͺ…

μž…μΆœλ ₯ 예 #1
문제의 μ˜ˆμ‹œμ™€ κ°™μŠ΅λ‹ˆλ‹€.

μž…μΆœλ ₯ 예 #2
ap 1개, ple 1개의 총 2개둜 apple을 λ§Œλ“€ 수 μžˆμœΌλ―€λ‘œ ν•„μš”ν•œ 단어 개수의 μ΅œμ†Ÿκ°’μ€ 2λ₯Ό return ν•©λ‹ˆλ‹€.

μž…μΆœλ ₯ 예 #3
μ£Όμ–΄μ§„ λ‹¨μ–΄λ‘œλŠ” bananaλ₯Ό λ§Œλ“€ 수 μ—†μœΌλ―€λ‘œ -1을 return ν•©λ‹ˆλ‹€.

λ°˜μ‘ν˜•
μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ λ³€κ²½κΈˆμ§€ (μƒˆμ°½μ—΄λ¦Ό)

'Algorithm Problem > Python' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[python] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - μ§€ν˜• νŽΈμ§‘  (2) 2020.09.16
[python] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - 숫자 블둝  (1) 2020.09.15
[python] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - 징검닀리  (4) 2020.09.13
[python] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - N-Queen  (2) 2020.09.13
[python] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - λ„λ‘‘μ§ˆ  (0) 2020.09.12
    'Algorithm Problem/Python' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • [python] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - μ§€ν˜• νŽΈμ§‘
    • [python] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - 숫자 블둝
    • [python] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - 징검닀리
    • [python] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - N-Queen
    deo2kim
    deo2kim
    μ½”λ”© κΈ°λ‘ν•˜κΈ°

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”