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";
}
}
- cards1과 cards2에 있는 단어들을 중복을 허용하지 않는 Set 객체에 담습니다.
- card1Index와 card2Index를 사용하여 각 카드 뭉치의 단어를 가리키는 인덱스를 초기화합니다.
- goal에 있는 단어를 순서대로 처리하면서 다음을 확인합니다
- 현재 단어가 cards1에 있는지 확인하고 존재한다면 card1Index를 증가시킵니다.
- 현재 단어가 cards2에 있는지 확인하고 존재한다면 card2Index를 증가시킵니다.
- 현재 단어가 집합에 없는 경우 즉시 "No"를 반환합니다.
- 사용한 단어는 Set에서 제거합니다.
- goal에 있는 단어를 순서대로 처리하면서 다음을 확인합니다
- 모든 단어를 확인하고 나면 "Yes"를 반환합니다.
다른 좋은 방안이 있다면 댓글로 의견 부탁드립니다.

'Algorithm > CodingTest' 카테고리의 다른 글
[Programmers] Level.1 2016년(Java) (0) | 2023.10.19 |
---|---|
[Programmers] Level.1 크기가 작은 부분 문자열(Java) (2) | 2023.10.19 |
[Programmers] Level1. 둘만의 암호(Java) (2) | 2023.10.15 |
[Programmers] Level.1 문자열 나누기(Java) (0) | 2023.10.15 |
[Programmers] Level.1 추억 점수(Java) (0) | 2023.10.13 |