λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Algorithm/Programmers

[Programmers] μ˜μ–΄ λλ§μž‡κΈ°

 

 

문제 

 

1λΆ€ν„° nκΉŒμ§€ λ²ˆν˜Έκ°€ λΆ™μ–΄μžˆλŠ” nλͺ…μ˜ μ‚¬λžŒμ΄ μ˜μ–΄ λλ§μž‡κΈ°λ₯Ό ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. μ˜μ–΄ λλ§μž‡κΈ°λŠ” λ‹€μŒκ³Ό 같은 κ·œμΉ™μœΌλ‘œ μ§„ν–‰λ©λ‹ˆλ‹€.

  1. 1λ²ˆλΆ€ν„° 번호 μˆœμ„œλŒ€λ‘œ ν•œ μ‚¬λžŒμ”© μ°¨λ‘€λŒ€λ‘œ 단어λ₯Ό λ§ν•©λ‹ˆλ‹€.
  2. λ§ˆμ§€λ§‰ μ‚¬λžŒμ΄ 단어λ₯Ό λ§ν•œ λ‹€μŒμ—λŠ” λ‹€μ‹œ 1λ²ˆλΆ€ν„° μ‹œμž‘ν•©λ‹ˆλ‹€.
  3. μ•žμ‚¬λžŒμ΄ λ§ν•œ λ‹¨μ–΄μ˜ λ§ˆμ§€λ§‰ 문자둜 μ‹œμž‘ν•˜λŠ” 단어λ₯Ό 말해야 ν•©λ‹ˆλ‹€.
  4. 이전에 λ“±μž₯ν–ˆλ˜ λ‹¨μ–΄λŠ” μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
  5. ν•œ κΈ€μžμΈ λ‹¨μ–΄λŠ” μΈμ •λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λ‹€μŒμ€ 3λͺ…이 λλ§μž‡κΈ°λ₯Ό ν•˜λŠ” 상황을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

tank → kick → know → wheel → land → dream → mother → robot → tank

μœ„ λλ§μž‡κΈ°λŠ” λ‹€μŒκ³Ό 같이 μ§„ν–‰λ©λ‹ˆλ‹€.

  • 1번 μ‚¬λžŒμ΄ μžμ‹ μ˜ 첫 번째 차둀에 tankλ₯Ό λ§ν•©λ‹ˆλ‹€.
  • 2번 μ‚¬λžŒμ΄ μžμ‹ μ˜ 첫 번째 차둀에 kick을 λ§ν•©λ‹ˆλ‹€.
  • 3번 μ‚¬λžŒμ΄ μžμ‹ μ˜ 첫 번째 차둀에 knowλ₯Ό λ§ν•©λ‹ˆλ‹€.
  • 1번 μ‚¬λžŒμ΄ μžμ‹ μ˜ 두 번째 차둀에 wheel을 λ§ν•©λ‹ˆλ‹€.
  • (계속 진행)

λλ§μž‡κΈ°λ₯Ό 계속 진행해 λ‚˜κ°€λ‹€ 보면, 3번 μ‚¬λžŒμ΄ μžμ‹ μ˜ μ„Έ 번째 차둀에 λ§ν•œ tank λΌλŠ” λ‹¨μ–΄λŠ” 이전에 λ“±μž₯ν–ˆλ˜ λ‹¨μ–΄μ΄λ―€λ‘œ νƒˆλ½ν•˜κ²Œ λ©λ‹ˆλ‹€.

μ‚¬λžŒμ˜ 수 nκ³Ό μ‚¬λžŒλ“€μ΄ μˆœμ„œλŒ€λ‘œ λ§ν•œ 단어 words κ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, κ°€μž₯ λ¨Όμ € νƒˆλ½ν•˜λŠ” μ‚¬λžŒμ˜ λ²ˆν˜Έμ™€ κ·Έ μ‚¬λžŒμ΄ μžμ‹ μ˜ λͺ‡ 번째 차둀에 νƒˆλ½ν•˜λŠ”μ§€λ₯Ό κ΅¬ν•΄μ„œ return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.

 

 

 

μ œν•œ 사항

 

  • λλ§μž‡κΈ°μ— μ°Έμ—¬ν•˜λŠ” μ‚¬λžŒμ˜ 수 n은 2 이상 10 μ΄ν•˜μ˜ μžμ—°μˆ˜μž…λ‹ˆλ‹€.
  • wordsλŠ” λλ§μž‡κΈ°μ— μ‚¬μš©ν•œ 단어듀이 μˆœμ„œλŒ€λ‘œ λ“€μ–΄μžˆλŠ” 배열이며, κΈΈμ΄λŠ” n 이상 100 μ΄ν•˜μž…λ‹ˆλ‹€.
  • λ‹¨μ–΄μ˜ κΈΈμ΄λŠ” 2 이상 50 μ΄ν•˜μž…λ‹ˆλ‹€.
  • λͺ¨λ“  λ‹¨μ–΄λŠ” μ•ŒνŒŒλ²³ μ†Œλ¬Έμžλ‘œλ§Œ 이루어져 μžˆμŠ΅λ‹ˆλ‹€.
  • λλ§μž‡κΈ°μ— μ‚¬μš©λ˜λŠ” λ‹¨μ–΄μ˜ 뜻(의미)은 μ‹ κ²½ 쓰지 μ•ŠμœΌμ…”λ„ λ©λ‹ˆλ‹€.
  • 정닡은 [ 번호, μ°¨λ‘€ ] ν˜•νƒœλ‘œ return ν•΄μ£Όμ„Έμš”.
  • λ§Œμ•½ 주어진 λ‹¨μ–΄λ“€λ‘œ νƒˆλ½μžκ°€ 생기지 μ•ŠλŠ”λ‹€λ©΄, [0, 0]을 return ν•΄μ£Όμ„Έμš”.

 

 

 

λ‚˜μ˜ μ½”λ“œ 
def solution(n, words):
    stack = []
    fail = 0
    # stack에 μˆœμ„œλŒ€λ‘œ λ„£μœΌλ©΄μ„œ νƒˆλ½ 쑰건에 λ§žμ•„λ–¨μ–΄μ§€λ©΄ fail 인원을 μ¦κ°€μ‹œν‚€κ³  λ°˜λ³΅λ¬Έμ„ μ’…λ£Œν•œλ‹€.
    # 쑰건 1. stack[-2][-1] != word[0] 일 λ•Œ νƒˆλ½μž λ°œμƒ 
    # 쑰건 2. 같은 단어가 μžˆμ„ λ•Œ νƒˆλ½μž λ°œμƒ
    for word in words:
        stack.append(word)
        if len(stack) > 1:
            if stack[-2][-1] != word[0]:
                fail += 1
                break
        if stack.count(word) > 1:
            fail += 1
            break 

    # νƒˆλ½μžκ°€ μ—†μœΌλ©΄ [0,0] λ°˜ν™˜
    if fail == 0:
        return [0,0]
    else:
        # stack의 길이가 n으둜 λ‚˜λˆ„μ–΄ λ–¨μ–΄μ§ˆ λ•Œ 
        if len(stack) % n == 0:
            return [n,len(stack)//n]
        # stack의 길이가 n으둜 λ‚˜λˆ„μ–΄ 떨어지지 μ•Šμ„ λ•Œ 
        else:
            return [len(stack)%n,(len(stack)//n)+1]