[ํ๋ก๊ทธ๋๋จธ์ค] : ์์ด ๋๋ง์๊ธฐ
๋ฌธ์
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
๋ถ๋ช ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํธ๋ ํต์์ ์ธ ํ์ด์ ๋ฐฉ๋ฒ์ด ์๊ฒ ์ง๋ง ์๊ฐ๋๋๋๋ก ํ์ด๋ณด์๋ค.