링크
https://school.programmers.co.kr/learn/courses/30/lessons/159994
1. 풀이
- "i" 라는 단어를 무조건 첫번째에 온다고 생각하면 안된다. 테스트케이스상 몇개만 등장한다고 생각해야된다.
- 접근방식을 cards1, cards2 로 배열을 만들생각을 하는게아니라 goal 배열에서 한단어씩 조회하는걸로 생각해야한다.
2. 처음에푼 코드
import java.util.*;
class Solution {
public String solution(String[] cards1, String[] cards2, String[] goal) {
String answer = "";
String[] arr = new String[goal.length];
for(int i=0; i<cards1.length; i++){
if(cards1[i].equals("i")){
arr[i] = cards1[i];
}
}
for(int i=0; i<cards2.length; i++){
arr[i+1] = cards2[i];
}
for(int i=0; i<cards1.length; i++){
if(!cards1[i].equals("i")){
arr[i+2] = cards1[i];
}
}
for(int i=0; i<arr.length; i++){
if(!arr[i].equals(goal[i])){
answer = "No";
}else{
answer = "Yes";
}
}
return answer;
}
}
위의 코드를 보면 알겠지만 짜고나서 드는생각이 진짜 생각없이 짰다는게 느껴질정도이다. 그래서 테스트케이스도 기본테스트케이스를 제외하고는 모두 통과하지못했다. 좀더 생각하면서 짤수있게 코드를 다시 작성했다.
3. 최종수정코드
class Solution {
public String solution(String[] cards1, String[] cards2, String[] goal) {
int pointer1 = 0, pointer2 = 0;
for (String word : goal) {
if (pointer1 < cards1.length && word.equals(cards1[pointer1])) {
pointer1++;
} else if (pointer2 < cards2.length && word.equals(cards2[pointer2])) {
pointer2++;
} else {
return "No";
}
}
return "Yes";
}
}
- 각각의 포인터들은 카드1과 카드2에 대한 포인터이다.
- 만약 goal 의 현재 단어가 카드1의 포인터1 위치에 있는 단어와 같으면 포인터1을 증가시킨다.
- 만약 goal 의 현재 단어가 카드2의 포인터2 위치에 있는 단어와 같으면 포인터2를 증가시킨다.
- 만약 위 두개의 조건이 모두 실행되면 Yes 를 반환한다.
- 만약 위 두개의 조건이 모두 실행되지않는다면 해당카드로 goal 을 만들수없다는 의미이니 No 를 반환한다.
'프로그래머스 코테 > 프로그래머스 Lv. 1' 카테고리의 다른 글
[프로그래머스 : Java] (2022 KAKAO TECH INTERNSHIP) 성격 유형 검사하기 (1) | 2023.06.08 |
---|---|
[프로그래머스 : Java] 나머지가 1이 되는 수 찾기 (0) | 2023.06.08 |
[프로그래머스 : Java] 바탕화면 정리 (0) | 2023.05.31 |
[프로그래머스 : Java] 달리기 경주 (1) | 2023.05.24 |
[프로그래머스 : Java] 자릿수 더하기 (0) | 2023.05.23 |