🌞Algorithm/πŸ”₯programmers

[programmers] μ˜μ–΄ λλ§μž‡κΈ° - Summer/Winter Coding(~2018)

λΏŒμ•Ό._. 2021. 1. 12. 20:40

μ½”λ”© ν…ŒμŠ€νŠΈ μ—°μŠ΅ - Summer/Winter Coding(~2018)


<μ˜μ–΄ λλ§μž‡κΈ°>

문제 μ„€λͺ…

 

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 ν•΄μ£Όμ„Έμš”.

 

문제 풀이

  -my solution

def solution(n, words):
    answer = []

    temp=words[0][-1] #첫번째 λ‹¨μ–΄μ˜ 끝 문자
    
    for i in range(1,len(words)):
        forward=words[i][0] #λ‹€μŒ λ‹¨μ–΄μ˜ 첫 문자
        tempwords=words[0:i+1] #쀑볡 확인을 μœ„ν•΄ list에 μ €μž₯
        if(tempwords.count(words[i])>1): #쀑볡이 μžˆλ‹€λ©΄ 
            answer.append(i%n+1) #번호
            answer.append(i//n+1) #μ°¨λ‘€
            break
        if(forward!=temp): #첫 λ¬Έμžμ™€ 끝 λ¬Έμžκ°€ κ°™μ§€ μ•Šλ‹€λ©΄ 
            answer.append(i%n+1) #번호
            answer.append(i//n+1) #μ°¨λ‘€
            break
        temp=words[i][-1] #끝 문자λ₯Ό ν˜„μž¬ λ‹¨μ–΄μ˜ 끝 문자둜 λ°”κΏ”μ€Œ
        
    if(len(answer)==0): #list의 길이가 0이면 νƒˆλ½μž μ—†μŒ
        answer.append(0)
        answer.append(0)
    return answer

  μ²˜μŒμ— 이 μ½”λ“œλ₯Ό μž‘μ„±ν•˜κ³  μ‹œκ°„ μ΄ˆκ³Όκ°€ λ°œμƒν• κΉŒλ΄ μ‘°λ§ˆμ‘°λ§ˆν•˜μ˜€λ‹€. λ‹€ν–‰νžˆ μ‹œκ°„ μ΄ˆκ³ΌλŠ” λ°œμƒν•˜μ§€ μ•Šκ³ , 

ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ 3λ¬Έμ œμ—μ„œ μ‹€νŒ¨κ°€ λ°œμƒν•˜μ˜€λ‹€. μ˜ˆμ™Έ 상황이 μ–΄λ–€ 것이 μ‘΄μž¬ν•˜λŠ”μ§€ μ‚΄νŽ΄λ³Έ κ²°κ³Ό 쀑볡 단어λ₯Ό

확인할 λ•Œ μžμ‹ μ˜ μˆœμ„œ μ•žμ—μ„œ λ§ν•œ 것듀과 비ꡐ해야 ν•˜λŠ”λ° 전체 list에 λŒ€ν•΄ 쀑볡을 νŒλ³„ν•˜μ—¬ μ‹€νŒ¨κ°€ λ°œμƒν•œλ‹€λŠ” 

것을 μ•Œκ²Œ λ˜μ—ˆλ‹€. 이 뢀뢄에 λŒ€ν•˜μ—¬ μ˜ˆμ™Έ μ½”λ“œλ₯Ό μž‘μ„±ν•΄μ£Όλ‹ˆ 문제λ₯Ό 톡과할 수 μžˆμ—ˆλ‹€.

 

 1) list 맨 처음 λ‹¨μ–΄μ˜ 끝 문자만 μ €μž₯

 2) list 순회 (λ‘λ²ˆμ§Έ 단어뢀터)

     2-1) λ‹¨μ–΄μ˜ 첫 문자λ₯Ό μ €μž₯

     2-2) λ‹¨μ–΄μ˜ 쀑볡 확인을 μœ„ν•΄ ν˜„μž¬ μΈλ±μŠ€κΉŒμ§€μ˜ λ¬Έμžλ“€λ§Œ λ”°λ‘œ list에 μ €μž₯ν•˜μ—¬

           μ€‘볡 νŒλ³„ -> 쀑볡이 μžˆλ‹€λ©΄ λ²ˆν˜Έμ™€ μ°¨λ‘€λ₯Ό answer list에 μΆ”κ°€ν•œ ν›„ 쀑지

     2-3) 첫 λ¬Έμžμ™€ 끝 λ¬Έμžκ°€ κ°™μ§€ μ•Šλ‹€λ©΄ -> νƒˆλ½μž λ°œμƒ(번호, μ°¨λ‘€ answer list에 μΆ”κ°€ ν›„ 쀑지)

     2-4) ν˜„μž¬ 인덱슀의 λ‹¨μ–΄μ˜ 끝 λ¬Έμžμ™€ λ‹€μŒ λ‹¨μ–΄μ˜ 첫 문자λ₯Ό 비ꡐ μœ„ν•΄ ν˜„μž¬ 인덱슀 λ‹¨μ–΄μ˜ 끝 문자 μ €μž₯

 3) answer list의 길이가 0이면 -> νƒˆλ½μžκ°€ μ—†μŒ (0,0을 answer list에 μΆ”κ°€)


좜처: ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ μ½”λ”© ν…ŒμŠ€νŠΈ μ—°μŠ΅, https://programmers.co.kr/learn/challenges