TIL
99클럽 11일차 TIL (240801)
wnwlals13
2024. 8. 1. 14:38
[Middler] 카드 뭉치
🔥 다시 풀어보기 🔥
오늘의 회고
레벨 1이 맞나...? 오늘의 문제는 문제를 이해하는 게 어려웠다. 처음에는 아래와 같이 생각했었다.
- 처음 생각한 문제 해결 방법
- cards1, card2에서 순차적으로 하나의 1개부터 cards1 혹은 cards2의 카드 개수만큼 고른다. (2중 포문)
- ex. ["i", "drink", "water"], ["want", "to"] 일 때
- i-want, i-want-to, i-drink-want, i-drink-want-to ... 이런식으로 카드를 뽑을 수 있다.
- ex. ["i", "drink", "water"], ["want", "to"] 일 때
- 문제점 : 테스트케이스처럼 i-want-to-drinkt-water 순으로 뽑을 수 없다.
- cards1, card2에서 순차적으로 하나의 1개부터 cards1 혹은 cards2의 카드 개수만큼 고른다. (2중 포문)
- 두번째 생각한 문제 해결 방법
- cards1, card2에서 순차적으로 하나의 1개부터 cards1 혹은 cards2의 카드 개수만큼 고른다.
- (추가) slice 메서드를 이용해서 cards1의 남은 카드를 뒤에 순차적으로 뽑아준다.
- ex. ["i", "drink", "water"], ["want", "to"] 일 때
- i-want, i-want-to, i-want-drink, i-want-drink-water, i-drink-want, i-drink-want-to ... 이런식으로 카드를 뽑을 수 있다.
- ex. ["i", "drink", "water"], ["want", "to"] 일 때
- 문제점 : cards2가 cards1 요소보다 먼저오는 테스트 케이스를 고려할 수 없다.
내가 생각한 해결 방법은 제출 후 테케 통과가 되지 않았다.. 그래서 다른 분들의 코드를 일부분 참고하여 위의 풀이의 문제점들을 파악할 수 있었다..!
참고한 문제풀이
1. javascript
아래 코드를 사용하면 goal의 길이만큼 돌면서, 만일 cards1이나 cards2의 순차적으로 확인해보며 goal의 요소와 동일한 요소가 있는지 확인하며 shift() 해준다. 이렇게 확인했을 때, 매번 배열의 첫번째 요소와 비교할 수 있기 때문에 순차를 지키며 확이하게 된다.
그리고 goal을 다 돌았는데 해당 순차에 동일한 요소를 발견하지 못했다면 No를 리턴하게 되어 있다.
로직을 좀 더 이해해보자!
function solution(cards1, cards2, goal) {
let a = cards1.shift();
let b = cards2.shift();
while (goal.length > 0) {
let g = goal.shift();
if(a === g) {
if(cards1.length > 0) {
a = cards1.shift();
}
}else if (b === g) {
if(cards2.length > 0) {
b = cards2.shift();
}
}else {
return "No";
}
}
return "Yes";
}