⌨️ Algorithms/프로그래머스
[Python] 프로그래머스 Lv1_카드 뭉치
monzheld
2023. 4. 9. 22:42
https://school.programmers.co.kr/learn/courses/30/lessons/159994
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- 코니는 다음과 같은 규칙으로 카드에 적힌 단어들을 사용해 원하는 순서의 단어 배열을 만들 수 있는지 알고 싶음
- 원하는 카드 뭉치에서 카드를 순서대로 한 장씩 사용
- 한 번 사용한 카드는 다시 사용할 수 없음
- 카드를 사용하지 않고 다음 카드로 넘어갈 수 없음
- 기존에 주어진 카드 뭉치의 단어 순서는 바꿀 수 없음
- 예를 들어 첫 번째 카드 뭉치에 순서대로 ["i", "drink", "water"], 두 번째 카드 뭉치에 순서대로 ["want", "to"]가 적혀있을 때 ["i", "want", "to", "drink", "water"] 순서의 단어 배열을 만들려고 한다면
- 첫 번째 카드 뭉치에서 "i"를 사용한 후
- 두 번째 카드 뭉치에서 "want"와 "to"를 사용하고
- 첫 번째 카드뭉치에 "drink"와 "water"를 차례대로 사용하면 원하는 순서의 단어 배열을 만들 수 있음
- 문자열로 이루어진 배열 cards1, cards2와 원하는 단어 배열 goal이 매개변수로 주어질 때, cards1과 cards2에 적힌 단어들로 goal를 만들 있다면 "Yes"를, 만들 수 없다면 "No"를 return
제한사항
- 1 ≤ cards1의 길이, cards2의 길이 ≤ 10
- 1 ≤ cards1[i]의 길이, cards2[i]의 길이 ≤ 10
- cards1과 cards2에는 서로 다른 단어만 존재
- 2 ≤ goal의 길이 ≤ cards1의 길이 + cards2의 길이
- 1 ≤ goal[i]의 길이 ≤ 10
- goal의 원소는 cards1과 cards2의 원소들로만 이루어져 있음
- cards1, cards2, goal의 문자열들은 모두 알파벳 소문자로만 이루어져 있음
"""
입출력 예시)
cards1 = ["i", "drink", "water"], cards2 = ["want", "to"], goal = ["i", "want", "to", "drink", "water"] -> "Yes"
cards1 = ["i", "water", "drink"], cards2 = ["want", "to"], goal = ["i", "want", "to", "drink", "water"] -> "No"
"""
## 의사코드 ##
# 카드 뭉치에서 순서대로 한 장씩 사용 -> 큐 이용 (선입선출)
# from collections import deque
# for w in goal:
# cards1이 비어있지 않고 현재 단어가 cards1의 첫 번째 원소와 같다면 cards1의 첫 번째 원소 삭제
# if cards1 and w == cards1[0]:
# cards1.popleft()
# cards2가 비어있지 않고 현재 단어가 cards2의 첫 번째 원소와 같다면 cards2의 첫 번째 원소 삭제
# elif cards2 and w == cards2[0]:
# cards2.popleft()
# else:
# return 'No'
통과한 코드
from collections import deque
def solution(cards1, cards2, goal):
cards1 = deque(cards1)
cards2 = deque(cards2)
for w in goal:
if cards1 and w == cards1[0]:
cards1.popleft()
elif cards2 and w == cards2[0]:
cards2.popleft()
else:
return 'NO'
return 'Yes'
- 카드 뭉치에서 순서대로 한 장씩 사용
- 선입선출 큐 이용 (deque)
- deque인 cards1 과 cards2가 비어있지 않은 경우에만 카드를 사용할 수 있으므로 'cards1', 'cards2' 라는 조건 추가
- index error 방지
- 과정 확인
cards1 = ["i", "water", "drink"]
cards2 = ["want", "to"]
goal = ["i", "want", "to", "drink", "water"]
"""
cards1: deque(['i', 'water', 'drink'])
cards2: deque(['want', 'to'])
w: i
cards1: deque(['water', 'drink'])
w: want
cards2: deque(['to'])
w: to
cards2: deque([])
w: drink
'NO'
"""
참고)
프로그래머스 - 카드 뭉치 (python)
문자열로 이루어진 배열 cards1, cards2 와 원하는 단어 배열 goal 이 매개변수로 주어질 때, cards1과 cards2에 적힌 단어들로 goal를 만들 수 있다면 'Yes'를, 만들 수 없다면 'No'를 return하는 solution 함수를
velog.io