728x90
반응형
📜 문제 내용
🤔 과정
- Queue나 ArrayList를 새로 생성하려다가 의도적으로 간단하게 생각하기 위해서 가지고 있는 배열을 최대한 이용하는 방법을 택했다.
- 단순히 배열 속 문자열 원소 비교를 이용해 인덱스 놀이를 하면 될 것 같았다.
✨ 최초 제출 답안
class Solution {
public String solution(String[] cards1, String[] cards2, String[] goal) {
int goalLen = goal.length;
// 단어 배열을 성공적으로 모두 완성했는 지 판별 여부
boolean flag = true;
int idxG = 0; // goals 배열의 인덱스
int idx1 = 0; // cards1 배열의 인덱스
int idx2 = 0; // cards2 배열의 인덱스
for(int i = 0; i < goalLen; i++){
// 다음으로 와야할 goals 배열의 글자와 cards1 배열의 가장 앞 글자 비교
if(idx1 < cards1.length && idxG < goalLen && goal[idxG].equals(cards1[idx1])){
idxG++;
idx1++;
}
// 다음으로 와야할 goals 배열의 글자와 cards2 배열의 가장 앞 글자 비교
if(idx2 < cards2.length && idxG < goalLen && goal[idxG].equals(cards2[idx2])){
idxG++;
idx2++;
}
// 만약 goals 배열의 idxG 인덱스가 다음 칸으로 못 갔다면
// 두 카드 뭉치에서 꺼낼 카드가 없는 것이므로 반복문 중지
if(i == idxG){
flag = false;
break;
}
}
String answer = flag ? "Yes" : "No";
return answer;
}
}
- 너무 의식의 흐름대로 푼 것 같아서 찝찝한 기분이 드는 코드다.
- 그래서 리팩토링을 통해 코드를 수정해보았다.
✍️ 재제출 답안
class Solution {
public String solution(String[] cards1, String[] cards2, String[] goal) {
int goalLen = goal.length;
// 단어 배열을 성공적으로 모두 완성했는 지 판별 여부
boolean flag = true;
int idx1 = 0; // cards1 배열의 인덱스
int idx2 = 0; // cards2 배열의 인덱스
for(int i = 0; i < goalLen; i++){
String currWord = goal[i];
boolean possible = false; // 다음 단어로 넘어갈 수 있는지 여부
// 다음으로 와야할 goals 배열의 글자와 cards1 배열의 가장 앞 글자 비교
if(idx1 < cards1.length && currWord.equals(cards1[idx1])){
possible = true;
idx1++;
}
// 다음으로 와야할 goals 배열의 글자와 cards2 배열의 가장 앞 글자 비교
if(idx2 < cards2.length && currWord.equals(cards2[idx2])){
possible = true;
idx2++;
}
// 뭉치들에서 카드를 가져오는게 불가능하다면 중지
if(!possible){
flag = false;
break;
}
}
String answer = flag ? "Yes" : "No";
return answer;
}
}
- Um... 메모리와 실행 시간에 큰 차이는 없고 이 코드 또한 통과했다.
🔗 문제 링크
728x90
반응형