[알고리즘] Swift -프로그래머스 연습문제 #159994(카드 뭉치)

2023. 5. 19. 01:42ALGORITHM/Swift

728x90
반응형

문제링크

 

 

 

 

분석

카드에 적힌 단어들을 사용해 원하는 순서의 단어 배열을 만들 수 있는 지 알고 싶다.

원하는 카드 뭉치에서 카드를 순서대로 한 장씩 사용한다.

한 번 사용한 카드는 다시 사용할 수 없다.

카드를 사용하지 않고 다음 카드로 넘어갈 수 없다.

기존에 주어진 카드 뭉치의 단어 순서는 바꿀 수 없다.

 

예를 들어 ["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"]))

 

 

 

 

 

 

728x90
반응형