✔ 카드 뭉치
문제 분석하기
cards1을 탐색할 인덱스1과 cards2를 탐색한 인덱스2를 선언한 후, 두 곳에서 모두 알맞는 단어가 없다면 No를 출력
손으로 풀어보기
- cards1을 탐색할 인덱스1과 cards2를 탐색한 인덱스2를 선언
- goal의 단어를 for문으로 탐색하며 cards1와 cards2에 존재하는지 확인
- 존재하지 않아 goal을 만들 수 없는 경우 No 리턴
- for문을 모두 돌며 goal을 만들 수 있다면 Yes 리턴
슈도코드 작성하기
cards1(문자열로 이루어진 배열1)
cards2(문자열로 이루어진 배열2)
goal(원하는 단어 배열)
idx1, idx2(cards1과 cards2의 인덱스)
for(goal만큼) {
if(idx1 < cards1.length && 현재 문자 == cards1[idx1])
idx1++
else if (idx2 < cards2.length && 현재 문자 == cards2[idx2])
idx2++
else
return "No"
}
return "Yes"
코드 구현하기
/**
* 159994) 카드_뭉치
*/
public class L071_159994 {
// cards1(문자열로 이루어진 배열1)
// cards2(문자열로 이루어진 배열2)
// goal(원하는 단어 배열)
public String solution(String[] cards1, String[] cards2, String[] goal) {
// idx1, idx2(cards1과 cards2의 인덱스)
int idx1 = 0;
int idx2 = 0;
String answer = "";
for (String word : goal) {
// goal의 단어가 cards1에 존재하는지
if (idx1 < cards1.length && cards1[idx1].equals(word)) {
idx1++;
}
// goal의 단어가 cards2에 존재하는지
else if (idx2 < cards2.length && cards2[idx2].equals(word)) {
idx2++;
}
// goal의 단어가 존재하지 않을 때
else {
// goal을 만들 수 없는 경우 No 리턴
answer = "No";
break;
}
// goal을 만들 수 있다면 Yes 리턴
answer = "Yes";
}
return answer;
}
// 테스트 케이스
public static void main(String[] args) {
L071_159994 solution = new L071_159994();
String[] cards1 = { "i", "drink", "water" };
String[] cards2 = { "want", "to" };
String[] goal = { "i", "want", "to", "drink", "water" };
String result = solution.solution(cards1, cards2, goal);
System.out.println(result);
}
}
'Coding Test > Java 알고리즘 실전' 카테고리의 다른 글
[150370] 개인정보 수집 유효기간 (0) | 2023.10.24 |
---|---|
[155652] 둘만의 암호 (0) | 2023.10.23 |
[160586] 대충 만든 자판 (0) | 2023.10.21 |
[161989] 덧칠하기 (0) | 2023.10.20 |
[161990] 바탕화면 정리 (0) | 2023.10.19 |