[문제 요약]
선행 스킬 순서 skill과 유저들이 만든 스킬트리를 담은 배열 skill_trees가 매개변수로 주어질 때, 가능한 skill트리 개수를 return하는 solution 함수를 작성해주세요.
- 스킬은 알파벳 대문자로 표기
- 스킬 순서와 스킬트리는 문자열로 표기
- skill의 길이는 1-26, 중복된 스킬 없음
- skill_trees는 길이 1-20의 배열이며, 그 원소는 길이가 2 이상 26 이하인 중복 없는 문자열
[내 풀이]
def available(skill, tree):
arr = [-1] * len(skill)
for i, s in enumerate(skill):
for j, t in enumerate(tree):
if t==s:
if i==0 or -1<arr[i-1]<j:
arr[i]=j
else:
return False
return True
def solution(skill, skill_trees):
answer = 0
s_num = len(skill)
for tree in skill_trees:
if available(skill, tree):
answer+=1
return answer
지저분하긴 한데 적당하게 풀었다고 생각했는데... 역시 나는 아직 갈 길이 먼 것을 깨달았다.
뒤에 따라올 다른 사람의 풀이를 보니..
[다른 사람의 풀이]
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
(다른 사람의 풀이 너무 깔끔해서 부러움... 저런 스킬을 익히고 싶다.)
파이썬 그래도 잘 아는 편이라고 생각했는데, for-else문, while-else문을 처음 알게 되었다.
for, while 등의 반복문에서의 else는 반복하다가 break를 만나 반복이 중지되면 실행되지 않고, break를 만나지 않고 반복을 모두 마쳤을 경우 마지막에 실행된다고 한다. 모든 조건을 만족했을 때 카운트하는 이 문제와 같은 경우에서 유용하게 사용할 수 있을 듯 하다.
그리고 skilllist 문자열을 새로 생성해서 만드는 것도, 또 다른 사람의 풀이에서의 list()와 pop()을 사용하는 풀이보다 더 효율적이고 명확한 것 같아서 좋았다.
출처
문제: https://school.programmers.co.kr/learn/courses/30/lessons/49993
for-else, while-else문: https://wikidocs.net/190098
'공부 기록 > 알고리즘 풀이' 카테고리의 다른 글
[240715] BOJ 16432 떡장수와 호랑이 (2) | 2024.07.15 |
---|---|
[240710] BOJ 2662 기업투자 (0) | 2024.07.10 |
[코드트리 | 삼성] 코드트리 빵 (0) | 2023.10.23 |
[코드트리 | 삼성] 포탑 부수기 (0) | 2023.10.21 |
[코드트리 | 삼성] 메이즈 러너 (0) | 2023.10.20 |