HIT해

[프로그래머스] 카드 뭉치 본문

Swift/알고리즘

[프로그래머스] 카드 뭉치

힛해 2024. 11. 28. 18:31
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/159994

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

goal 배열을 두번 순회하면서 일치하는지 확인하고 최초 접근 인덱스 위치를 변경해 알아보려했다.

 

코드

import Foundation

func solution(_ cards1:[String], _ cards2:[String], _ goal:[String]) -> String {
    // goal을 두번 순회하면서 인덱스위치를 저장하고 그 후에 다음 요소가 존재하고 안하고를 판별해보자.
    
    var index = 0
    var count = 0
    
    for i in cards1 {
        for j in index..<goal.count {
            if goal[j] == i {
                index = j
                count += 1
                continue
            }
        }
    }
    
    if count != cards1.count {
        return "No"
    }
    
    index = 0
    count = 0
    
    for i in cards2 {
        for j in index..<goal.count {
            if goal[j] == i {
                index = j
                count += 1
                continue
            }
        }
    }
    
    if count != cards2.count {
        return "No"
    }
    
    return "Yes"
}

 

결과

 

특정 테스트케이스에서 실패했다.

 

그이유는 goal 의 순서를 고려하지 않아서 그렇다.

 

수정한 코드

한번의 배열 순회안에서 두개의 인덱스를 동시에 관리하면 쉽게 해결할 수 있다.

 

import Foundation

func solution(_ cards1:[String], _ cards2:[String], _ goal:[String]) -> String {
    
    var index1 = 0
    var index2 = 0
    
    for word in goal {
        if index1 < cards1.count && cards1[index1] == word {
            index1 += 1
        } else if index2 < cards2.count && cards2[index2] == word {
            index2 += 1
        } else {
            return "No"
        }
    }
    
    return "Yes"
    
}