2023. 5. 19. 01:42ㆍALGORITHM/Swift
문제링크
분석
카드에 적힌 단어들을 사용해 원하는 순서의 단어 배열을 만들 수 있는 지 알고 싶다.
원하는 카드 뭉치에서 카드를 순서대로 한 장씩 사용한다.
한 번 사용한 카드는 다시 사용할 수 없다.
카드를 사용하지 않고 다음 카드로 넘어갈 수 없다.
기존에 주어진 카드 뭉치의 단어 순서는 바꿀 수 없다.
예를 들어 ["i", "drink", "water"] ["want", "to"]가 적혀있을 때
["i", "want", "to", "drink", "water"] 순서의 단어 배열을 만들려고 할 때
첫 번째 카드 뭉치에서 i를 사용한 후 두 번째 카드 뭉치에서 want, to를 사용하고
첫 번째 카드 뭉치에서 drink와 water 차례로 사용하면 원하는 순서의 단어 배열을 만들 수 있다.
문자열로 이루어진 배열 카드 뭉치 2개와 원하는 단어 배열이 주어질 때, 카드 뭉치로 원하는 단어 배열을 만들 수 있다면 "YES", 만들 수 없다면 "NO"를 리턴하는 문제이다.
1 <= 카드 뭉치의 길이 <= 10
1 <= 카드 길이 <= 10, 카드뭉치1과 카드뭉치2에는 서로 다른 단어만 존재한다.
2 <= 원하는 단어 배열의 길이 <= 카드뭉치1의 길이 + 카드뭉치2의 길이
1 <= 원하는 단어의 길이 <= 10, 원하는 단어는 카드뭉치의 원소들로만 이루어져있다.
풀이 과정
기존에 주어진 카드 뭉치의 단어 순서를 바꿀 수 없다는 조건과 카드를 사용하지 않고 다음 카드로 넘어갈 수 없다는 조건을 생각하면
원하는 단어 배열에 처음으로 있는 단어와 카드뭉치에 처음으로 있는 단어와 비교하여 만들 수 있는 지 확인한다.
풀이
import Foundation
func solution(_ cards1:[String], _ cards2:[String], _ goal:[String]) -> String {
var cards1Arr = cards1
var cards2Arr = cards2
for card in goal {
if card == cards1Arr.first {
cards1Arr.removeFirst()
} else if card == cards2Arr.first{
cards2Arr.removeFirst()
} else {
return "No"
}
}
return "Yes"
}
결과
print(solution(["i", "water", "drink"], ["want", "to"], ["i", "want", "to", "drink", "water"]))
'ALGORITHM > Swift' 카테고리의 다른 글
[알고리즘] Swift -프로그래머스 연습문제 #147355(크기가 작은 부분 문자열) (0) | 2023.05.23 |
---|---|
[알고리즘] Swift -프로그래머스 연습문제 #150370(2023 카카오 블라인드_개인정보 수집 유효기간) (0) | 2023.05.22 |
[알고리즘] Swift -프로그래머스 연습문제 #161989(덧칠하기) (0) | 2023.05.18 |
[알고리즘] Swift -프로그래머스 연습문제 #67256(2020 카카오 인턴십_키피드 누르기) (1) | 2023.04.22 |
[알고리즘] Swift -프로그래머스 연습문제 #155652(둘만의 암호) (0) | 2023.04.05 |