https://school.programmers.co.kr/learn/courses/30/lessons/159994?language=python3
def solution(cards1, cards2, goal):
answer = ''
cards1_len = len(cards1)
cards2_len = len(cards2)
goal_len = len(goal)
cards1_idx = 0
cards2_idx = 0
cnt = 0
for i in range(goal_len):
if cards1_len > cards1_idx and goal[i] == cards1[cards1_idx]:
cards1_idx += 1
cnt += 1
if cards2_len > cards2_idx and goal[i] == cards2[cards2_idx]:
cards2_idx += 1
cnt += 1
if cnt < goal_len:
answer = 'No'
else:
answer = "Yes"
return answer
- goal 리스트를 1회 순회함으로써 해결할 수 있다.
- goal 문자열을 완성할 수 있는지 확인하기 위해 cnt 변수를 두었다.
- cards1과 cards2의 인덱스를 따로 만들어서 0부터 증가하며 goal과 같은 문자열이 있는지 확인한다.
- goal과 같은 문자열이 있으면 그 다음 인덱스의 문자열을 비교하면 되므로 카드의 인덱스를 1 증가시켜준다. 일치함을 판단할 척도인 cnt도 1 증가시킨다.
- goal의 길이보다 cnt가 작으면 goal을 만들 수 없다는 의미이므로 No를 반환하고 이외에는 Yes를 반환한다.
- cards_len을 만들어서 cards_idx와 따로 비교해준 이유는 두 배열의 길이가 다르기 때문에 발생할 수 있는 index out of range 에러를 방지하기 위함이다.
Yes
or No
를 반환해도 될 것 같다. 다만 이도 마찬가지로 cards1, cards2 큐가 비었는지를 수시로 체크해야 된다.goal_len
, cards_len
과 같이 따로 변수를 만들어서 len
을 저장해 준 이유는 조금이라도 빠른 실행 속도를 위함이다.