πŸ’†πŸ»‍♂️ ν”Ό-μ—μŠ€/🐣 ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

[μŠ€μœ„ν”„νŠΈ μ•Œκ³ λ¦¬μ¦˜] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€: μ˜μ–΄ λλ§μž‡κΈ°

κ°œλ°œν•˜λŠ” ν›ˆμ΄ 2021. 8. 16. 18:09

제λͺ©

문제 μ„€λͺ…

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 ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.

 

풀이

μ€‘λ³΅λ˜λŠ” λ‹¨μ–΄μ˜ μœ λ¬΄λŠ” Set을 ν†΅ν•΄μ„œ, λ§ˆμ§€λ§‰ 끝 λ¬Έμžμ™€ ν˜„μž¬ μ•ž λ¬Έμžκ°€ 같은지 λΉ„κ΅ν•΄μ„œ λλ§μž‡κΈ°κ°€ μ •μƒμ μœΌλ‘œ μ§„ν–‰λ˜κ³  μžˆλŠ”μ§€ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. λ§Œμ•½ 잘λͺ»λœ 단어가 발견되면 ν˜„μž¬ λ‹¨μ–΄μ˜ 인덱슀λ₯Ό 톡해 λˆ„κ΅¬(index % n + 1)의 λͺ‡λ²ˆμ§Έ(index / n + 1) 단어인지λ₯Ό κ³„μ‚°ν•˜μ—¬ λ°˜ν™˜ν•©λ‹ˆλ‹€. λ§ˆμ§€λ§‰ λ‹¨μ–΄κΉŒμ§€ λ‹€ ν™•μΈν–ˆμ„ λ•Œλ„ λλ§μž‡κΈ°κ°€ μ •μƒμ μœΌλ‘œ μ§„ν–‰λ˜μ—ˆλ‹€λ©΄ [0, 0]을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

μ½”λ“œ

import Foundation

func solution(_ n:Int, _ words:[String]) -> [Int] {
    var wordSet = Set<String>()
    for (index, word) in words.enumerated() {
        if !wordSet.isEmpty && (wordSet.contains(word) || words[index-1].last != word.first){
            return [(index % n) + 1, index / n + 1]
        }
        wordSet.insert(word)
    }
    
    return [0, 0]
}