[Python] ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ฉํ ์คํธ ์ฐ์ต level2 (์คํฌํธ๋ฆฌ)
1. ๋ฌธ์ ์ค๋ช
์ ํ ์คํฌ์ด๋ ์ด๋ค ์คํฌ์ ๋ฐฐ์ฐ๊ธฐ ์ ์ ๋จผ์ ๋ฐฐ์์ผ ํ๋ ์คํฌ์ ๋ปํฉ๋๋ค.
์๋ฅผ ๋ค์ด ์ ํ ์คํฌ ์์๊ฐ ์คํํฌ → ๋ผ์ดํธ๋ ๋ณผํธ → ์ฌ๋์ผ๋, ์ฌ๋๋ฅผ ๋ฐฐ์ฐ๋ ค๋ฉด ๋จผ์ ๋ผ์ดํธ๋ ๋ณผํธ๋ฅผ ๋ฐฐ์์ผ ํ๊ณ , ๋ผ์ดํธ๋ ๋ณผํธ๋ฅผ ๋ฐฐ์ฐ๋ ค๋ฉด ๋จผ์ ์คํํฌ๋ฅผ ๋ฐฐ์์ผ ํฉ๋๋ค.
์ ์์์ ์๋ ๋ค๋ฅธ ์คํฌ(ํ๋ง ๋ฑ)์ ์์์ ์๊ด์์ด ๋ฐฐ์ธ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์คํํฌ → ํ๋ง → ๋ผ์ดํธ๋ ๋ณผํธ → ์ฌ๋์ ๊ฐ์ ์คํฌํธ๋ฆฌ๋ ๊ฐ๋ฅํ์ง๋ง, ์ฌ๋ → ์คํํฌ๋ ๋ผ์ดํธ๋ ๋ณผํธ → ์คํํฌ → ํ๋ง → ์ฌ๋์ ๊ฐ์ ์คํฌํธ๋ฆฌ๋ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
์ ํ ์คํฌ ์์ skill๊ณผ ์ ์ ๋ค์ด ๋ง๋ ์คํฌํธ๋ฆฌ1๋ฅผ ๋ด์ ๋ฐฐ์ด skill_trees๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๊ฐ๋ฅํ ์คํฌํธ๋ฆฌ ๊ฐ์๋ฅผ return ํ๋ solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
2. ์ ํ ์กฐ๊ฑด
- ์คํฌ์ ์ํ๋ฒณ ๋๋ฌธ์๋ก ํ๊ธฐํ๋ฉฐ, ๋ชจ๋ ๋ฌธ์์ด์ ์ํ๋ฒณ ๋๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
- ์คํฌ ์์์ ์คํฌํธ๋ฆฌ๋ ๋ฌธ์์ด๋ก ํ๊ธฐํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด, C → B → D ๋ผ๋ฉด "CBD"๋ก ํ๊ธฐํฉ๋๋ค
- ์ ํ ์คํฌ ์์ skill์ ๊ธธ์ด๋ 1 ์ด์ 26 ์ดํ์ด๋ฉฐ, ์คํฌ์ ์ค๋ณตํด ์ฃผ์ด์ง์ง ์์ต๋๋ค.
- skill_trees๋ ๊ธธ์ด 1 ์ด์ 20 ์ดํ์ธ ๋ฐฐ์ด์ ๋๋ค.
- skill_trees์ ์์๋ ์คํฌ์ ๋ํ๋ด๋ ๋ฌธ์์ด์
๋๋ค.
- skill_trees์ ์์๋ ๊ธธ์ด๊ฐ 2 ์ด์ 26 ์ดํ์ธ ๋ฌธ์์ด์ด๋ฉฐ, ์คํฌ์ด ์ค๋ณตํด ์ฃผ์ด์ง์ง ์์ต๋๋ค.
![](https://blog.kakaocdn.net/dn/GL3NS/btrWJafg456/DsoK3pAUocqzqSdKlxjof0/img.png)
3. ๋ด ํ์ด
def solution(skill, skill_trees):
answer = len(skill_trees)
skill = {k:v for k,v in zip(skill,range(len(skill)))}
for i in skill_trees:
a = -1
for j in i:
if j in skill.keys() and skill[j] <= a+1:
a = max(skill[j],a)
elif j in skill.keys() and skill[j] > a:
answer -= 1
break
return answer
1. answer์ skill_trees์ ์์์ ๊ฐ์ ๋งํผ ์ ์ธ (์กฐ๊ฑด์ ๋ง์กฑํ์ง ์๋ ๊ฒฝ์ฐ -1)
2. ์ ํ ์กฐ๊ฑด skill์ ๋์ ๋๋ฆฌ๋ก ์ ์ธ (์์๋ 0๋ถํฐ ์ฐจ๋ก๋๋ก)
-> defaultdict() ์ฌ์ฉํด๋ ๋ ๋ฏ
3. ์ด์ค for๋ฌธ์ ์ฌ์ฉํ์ฌ skill_trees์ ๋ชจ๋ ๊ธ์์ ์ ๊ทผ,
4. ๊ธ์๊ฐ skill ๋์ ๋๋ฆฌ์ key๋ก ์กด์ฌํ๊ณ , skill[j]๊ฐ ํด๋น ๋ฌธ์์ด์ value๊ฐ์ ์ต๋๊ฐ+1 ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ผ๋ฉด ํจ์ค
5. ๊ธ์๊ฐ skill ๋์ ๋๋ฆฌ์ key๋ก ์กด์ฌํ๊ณ skill[j]๊ฐ ํด๋น ๋ฌธ์์ด์ value๊ฐ๋ณด๋ค ํฌ๋ฉด answer -1 ํ break
4. ๋ค๋ฅธ ์ฌ๋ ํ์ด
def solution(skill, skill_trees):
answer = 0
for skills in skill_trees:
skill_list = list(skill)
for s in skills:
if s in skill:
if s != skill_list.pop(0):
break
else:
answer += 1
return answer
for - else ๋ฌธ์ ์ฌ์ฉํ๋ฉด for๋ฌธ์ด ์ค๊ฐ์ break ๋์ง ์๊ณ ๋ฉ์ถ๋ฉด else๋ฅผ ์ํํจ
def solution(skill,skill_tree):
answer=0
for i in skill_tree:
skillist=''
for z in i:
if z in skill:
skillist+=z
if skillist==skill[0:len(skillist)]:
answer+=1
return answer