728x90
def solution(skill, skill_trees):
flag = 0
for trees in skill_trees:
skill_check = []
for a in trees:
if a in skill:
skill_check.append(a)
for i, v in enumerate(skill_check):
if v != skill[i]:
flag += 1
break
return len(skill_trees) - flag
solution("CBD", ["BACDE", "CBADF", "AECB", "BDA"])
가장 생각이 안났던 부분은 check 리스트의 길이가 skill 리스트 보다 짧을 경우 어떻게 처리해야되는가 였는데
그냥 check_list 만 순회하면서 값을 비교하면 되니까 문제가 없다.
- 각 스킬트리의 element마다 skill 에 있는 element가 있으면 skill_check 에 저장
- skill_check 리스트를 순회하면서 skill 리스트의 값과 비교 후 다르면 flag에 1씩 추가
pop을 이용한 풀이
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
각각의 skill tree의 element에 대해(skills) 탐색
skills의 string을 하나씩 skill과 비교하면서, skills의 char가 skill에 있다면,
skill_list라는 비교 리스트의 맨처음 element와 비교,
여기서 pop를 사용해서 비교하면 for loop을 안써도 됨.
만약 pop한 char와 skills의 s가 다르다면 스킬트리 규칙에 어긋나기 때문에 해당 스킬 트리 리스트의 element 탐색 종료하고 다음 element를 탐색
else문은 for-else를 사용해서 for 문에 제대로 돌아갔다면, 즉, 스킬 트리 규칙에 맞다면 answer += 1
[Tips]
- pop을 사용해서 비교하는 방법
- for-else문을 사용하는 방법
728x90
'Algorithm' 카테고리의 다른 글
[프로그래머스] 문자열 압축 파이썬 (1) | 2021.03.03 |
---|---|
[프로그래머스] 주식가격 파이썬 (0) | 2021.03.03 |
[프로그래머스] 프린터 파이썬 (0) | 2021.03.03 |
[프로그래머스] 124 나라의 숫자 (0) | 2021.03.02 |
[프로그래머스] 서울에서 김서방 찾기 (JS, Python) (0) | 2021.02.04 |
댓글