๐Ÿ“š ๋ฐฑ์ค€

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] : ์˜์–ด ๋๋ง์ž‡๊ธฐ

coram22 2025. 7. 17. 17:39
728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

https://school.programmers.co.kr/learn/courses/30/lessons/12981

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก์˜ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr

์ด ๋ฌธ์ œ๋Š” n๋ช…์˜ ์‚ฌ๋žŒ๋“ค์ด ๋๋ง์ž‡๊ธฐ ๊ฒŒ์ž„์„ ํ•  ๋•Œ, (1)์ž˜๋ชป๋œ ๋‹จ์–ด๋ฅผ ๋งํ•˜๊ฑฐ๋‚˜, ์ด์ „์— ๋งํ•œ (2)์ค‘๋ณต๋œ ๋‹จ์–ด๋ฅผ ๋งํ•˜๋Š” ๊ฒฝ์šฐ ์ข…๋ฃŒ๋œ๋‹ค.

์ด ๋•Œ, ์˜ค๋‹ต์„ ๋งํ•œ ์‚ฌ๋žŒ์ด (1)๋ช‡ ๋ฒˆ์งธ ์‚ฌ๋žŒ์ด๋ฉฐ, ๊ฒŒ์ž„์ด ์ข…๋ฃŒ๋˜๋Š” ์‹œ์ ์€ (2)๋ช‡ ๋ฒˆ์งธ ํ„ด์— ์ข…๋ฃŒ๋˜๋Š”์ง€๋ฅผ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค.

 

์ฆ‰, ์ •๋ฆฌํ•˜๋ฉด ๊ฒŒ์ž„์ด ์ข…๋ฃŒ๋˜๋Š” ์กฐ๊ฑด์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

(1)์ž˜๋ชป๋œ ๋‹จ์–ด : ๋งˆ์ง€๋ง‰ ๋‹จ์–ด์˜ ๋ ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜์ง€ ์•Š๋Š” ๋‹จ์–ด

(2)์ค‘๋ณต๋œ ๋‹จ์–ด : ์•ž์— ์–ธ๊ธ‰๋œ ๋‹จ์–ด์™€ ๊ฐ™์€ ๋‹จ์–ด

 

๊ทธ๋ฆฌ๊ณ , ์šฐ๋ฆฌ๊ฐ€ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ๋‘ ๊ฐ€์ง€ ์ด๋‹ค.

(1)๋ช‡ ๋ฒˆ์งธ ์‚ฌ๋žŒ : ์˜ค๋‹ต์„ ๋งํ•œ ์‚ฌ๋žŒ์€ n๋ช… ์ค‘ ๋ช‡ ๋ฒˆ์งธ ์‚ฌ๋žŒ์ธ์ง€

(2)๋ช‡ ๋ฒˆ์งธ ํ„ด์— ์ข…๋ฃŒ : ์ด ๋ช‡ ๋ฒˆ์˜ ํ„ด์ด ์ง€๋‚˜๋Š” ์‹œ์ ์— ์˜ค๋‹ต์ด ๋ฐœ์ƒํ–ˆ๋Š”์ง€

 

.

 

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด 3๊ฐ€์ง€ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.

1) duplicate_word(n, words) : ์ค‘๋ณต๋œ ๋‹จ์–ด๋ฅผ ๋งํ–ˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•˜๋Š” ํ•จ์ˆ˜. ๋งŒ์•ฝ ์žˆ๋‹ค๋ฉด, ์ค‘๋ณต๋œ ๋‹จ์–ด์˜ index๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

2) not_correct(n, words) : ๋งˆ์ง€๋ง‰ ๋‹จ์–ด์˜ ๋ ์•ŒํŒŒ๋ฒณ์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋‹จ์–ด๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋งํ–ˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•˜๋Š” ํ•จ์ˆ˜. ๋งŒ์•ฝ ๋‹ค๋ฅด๋‹ค๋ฉด, ํ•ด๋‹น ๋‹จ์–ด์˜ index๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

- ์ง€๊ธˆ ๋‹ค์‹œ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ, 1,2 ํ•จ์ˆ˜์—์„œ๋Š” n์„ ๋ฐ›์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

3) find_num_turn(n, idx) : ์˜ค๋‹ต ๋‹จ์–ด์˜ idx ์œ„์น˜์™€ ์ฐธ์—ฌ์ž ์ˆ˜๋ฅผ ๋ฐ›์•„ ์˜ค๋‹ต์„ ๋งํ•œ ์‚ฌ๋žŒ์ด ๋ช‡ ๋ฒˆ์งธ ์‚ฌ๋žŒ์ธ์ง€, ๋ช‡ ๋ฒˆ์งธ ํ„ด์ธ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

 

์ด๋ ‡๊ฒŒ ๊ฐ๊ฐ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค.

๋‹ค์Œ์€ ์ด๋ฅผ ๊ตฌ์ฒด์ ์œผ๋กœ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ์ด๋‹ค.

 

 

์ •๋‹ต

def solution(n, words):
    answer = []
    idx = 0
    turn = 0
    p_id = 0
    
    # ๋‘ ํ•จ์ˆ˜์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ์ฐพ๋Š”๋‹ค -> ๋จผ์ € ๋ฐœ๊ฒฌ๋œ ์˜ค๋‹ต์— ๋งž๊ฒŒ ๊ฒŒ์ž„์ด ์ข…๋ฃŒ๋ผ์•ผ ํ•˜๋ฏ€๋กœ
    idx = min(duplicate_word(n, words), not_correct(n, words))
    # idx์˜ ์ดˆ๊ธฐ๊ฐ’์„ ๊ฐ ํ•จ์ˆ˜ ๋‚ด์—์„œ 101๋กœ ์žก์•˜๊ธฐ ๋•Œ๋ฌธ์— 101์ด ์•„๋‹ˆ๋ฉด ๊ทธ์ „์— ์ข…๋ฃŒ๋˜๋Š” ์กฐ๊ฑด์ด ์žˆ๋‹ค๋Š” ๊ฒƒ
    if idx != 101 :
        p_id, turn = find_num_turn(n, idx) # ๊ฐ idx์— ๋งž๋Š” ์ฐธ๊ฐ€์ž ๋ฒˆํ˜ธ์™€ ๊ฒŒ์ž„์˜ ํ„ด์„ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜
        answer = [p_id, turn]
    else :
        answer = [0,0]
    return answer

# ์ค‘๋ณต๋œ ๋‹จ์–ด๊ฐ€ ์žˆ๋Š”์ง€ ์ฐพ๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜
def duplicate_word(n, words) :
    said = []
    idx = 101
    for i in range(len(words)) :
        if words[i] in said :
                print(words[i])
                idx = i
                break
        said.append(words[i])
    return idx

# ๋ ๋‹จ์–ด๋กœ ์‹œ์ž‘ํ•˜์ง€ ์•Š๋Š” ๋‹จ์–ด๊ฐ€ ์žˆ๋Š”์ง€ ์ฐพ๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜
def not_correct(n, words) :
    idx = 101
    for i in range(len(words)-1) :
        if words[i][-1] != words[i+1][0] :
            print(words[i+1])
            idx = i+1
            break
    return idx

# ์˜ค๋‹ต ๋‹จ์–ด idx๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ณ„์‚ฐํ•˜์—ฌ ์˜ค๋‹ต์„ ๋งํ•œ ์‚ฌ๋žŒ๊ณผ ๊ฒŒ์ž„์˜ ์ฐจ๋ก€๋ฅผ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜
def find_num_turn(n, idx) :
    p_id = (idx % n)+1
    turn = ((idx) // n)+1
    return p_id, turn

 

 

๋ถ„๋ช… ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š” ํ†ต์ƒ์ ์ธ ํ’€์ด์™€ ๋ฐฉ๋ฒ•์ด ์žˆ๊ฒ ์ง€๋งŒ ์ƒ๊ฐ๋‚˜๋Š”๋Œ€๋กœ ํ’€์–ด๋ณด์•˜๋‹ค.

728x90
๋ฐ˜์‘ํ˜•