728x90
def solution(skill, skill_trees):
answer = 0
for skill_tree in skill_trees:
old_val = skill_tree.find(skill[0]) # 이전값과 비교하기 위한 변수. 처음 값은 skill의 첫 글자의 인덱스값
for sk in skill[1:]:
val = skill_tree.find(sk) # val는 비교할 값의 인덱스
if old_val == -1: # 만약 old_val == -1 인 경우에는(스킬트리 내에 없음)
if val != -1: # 다음값이 다 -1인 경우(스킬트리에 없는 경우)에만 진행
break # 하나의 값이 존재하면 불가능한 스킬트리
else: # old_val > -1 # 이전값이 스킬트리 내에 있고
if val < old_val: # 현재 값이 이전값보다 작은 경우
if val == -1: # 현재값이 스킬트리 내 없으면 가능
old_val = val
else: # 스킬트리내 있으면 불가능
break
else: # 현재값이 이전값보다 큰 경우는 가능
old_val = val
else:
answer += 1 # break없이 돌았을경우 가능한 스킬트리
return answer
꽤 오래 해멘 문제이다.
보자마자 인덱스 값으로 크기를 비교하면 쉽게 할수있을 것이라 생각했다
하지만 인덱스 값이 반환 되었을때와 반환이 되지 않았을 때(-1)가 있었기 때문에 단순하게 비교할수없었다.
약 한 두시간 정도 짱돌을 굴려봤는데 답이 도저히 나오지 않았고 그냥 조건을 덕지덕지 붙여서 사용했다.
풀긴 풀었지만 풀었다고 하기엔 좀 애매한 풀이이다
아래 다른 사람의 깔끔한 풀이도 첨부해놨다.
## 다른 사람의 풀이. 깔끔해서 가져왔다.
from collections import deque
def solution(skill, skill_trees):
answer = 0
for skill_tree in skill_trees:
skill_list = deque(list(skill))
for s in skill_tree:
if s in skill:
if s != skill_list.popleft():
break
else:
answer += 1
return answer
'STUDY > Algorithm' 카테고리의 다른 글
[백준] 1003 피보나치 함수 (0) | 2021.01.28 |
---|---|
[백준] 10250 ACM 호텔 (0) | 2021.01.28 |
4835. [파이썬 S/W 문제해결 기본] 1일차 - 구간합 (0) | 2021.01.11 |
4834. [파이썬 S/W 문제해결 기본] 1일차 - 숫자 카드 (0) | 2021.01.11 |
SW Expert Academy 파이썬 프로그래밍 기초(1) (0) | 2021.01.01 |