Algorithm/CodingTest

[Programmers] Level.1 카드 뭉치(Java)

누구세연 2023. 10. 15. 16:01

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

카드 뭉치라는 문제 Java로 문제 풀하겠습니다.

문제 설명

이 문제는 두 개의 문자열 배열 cards1, cards2로부터 원하는 단어 배열 goal을 만들 수 있는지 확인하는 것입니다.

제한 사항 및 입출력 예

 

다음과 같이 문제 풀이 하였습니다.

import java.util.HashSet;
import java.util.Set;

class Solution {
    public String solution(String[] cards1, String[] cards2, String[] goal) {
        Set<String> cardSet = new HashSet<>();
        for (String card : cards1) {
            cardSet.add(card);
        }
        for (String card: cards2) {
            cardSet.add(card);
        }

        int card1Index = 0, card2Index = 0;
        for (String word : goal) {
            if (card1Index < cards1.length && cards1[card1Index].equals(word)) {
                card1Index++;
            } else if (card2Index < cards2.length && cards2[card2Index].equals(word)) {
                card2Index++;
            } else {
                return "No";
            }

            if (!cardSet.contains(word)){
                return "No";
            }

            cardSet.remove(word);
        }
        return "Yes";
    }
}
  1. cards1과 cards2에 있는 단어들을 중복을 허용하지 않는 Set 객체에 담습니다.
  2. card1Index와 card2Index를 사용하여 각 카드 뭉치의 단어를 가리키는 인덱스를 초기화합니다.
    1. goal에 있는 단어를 순서대로 처리하면서 다음을 확인합니다
      - 현재 단어가 cards1에 있는지 확인하고 존재한다면 card1Index를 증가시킵니다.
      - 현재 단어가 cards2에 있는지 확인하고 존재한다면 card2Index를 증가시킵니다.
      - 현재 단어가 집합에 없는 경우 즉시 "No"를  반환합니다.
      - 사용한 단어는 Set에서 제거합니다.
  3. 모든 단어를 확인하고 나면 "Yes"를 반환합니다.

 

다른 좋은 방안이 있다면 댓글로 의견 부탁드립니다.