이 문제의 경우 for문을 돌려 arr의 앞의 값과 뒤의 값이 다를 때 앞의 값을 앞의 값을 result 배열에 할당하는 식으로 문제를 해결하려 했습니다. 그런데 제가 생각한 대로 예시 테스트 케이스는 통과를 했는데 실제로 코드를 제출할때는 통과를 하지 못하더군요...
그래서 gpt 찬스를 사용했는데 중복 여부를 판단할 때 indexOf 메서드를 사용하더라고요? 보고 감탄할 수 밖에 없었습니다. 그래서 해당 메서드를 사용해서 문제를 풀게 되었습니다. (물론 Set 메서드를 사용해도 되는데 그럴 경우 Array.from 메서드로 형변환을 해줘야 해서...)
여기서 알게된 점은 indexOf 메서드를 사용할 때 해당 값이 존재하지 않을 경우 -1을 반환한다라는 겁니다. 이를 통해 해당 배열에 값이 존재할 경우(인덱스가 있어서 -1와 같지 않을 경우)에는 무시하고, 값이 없을 경우(-1을 반환하므로 -1와 같은 경우) 해당 값을 result 배열에 push하는 식으로 코드를 구현했습니다.
function solution(arr, k) { let result = [arr[0]]; // result 배열에 미리 arr의 첫번째 요소를 저장하고 for (let i = 1; i < arr.length; i++) { // i를 1부터 시작해 arr의 배열만큼 도는 동안(어차피 첫번째 요소는 담겨 있는 상태이므로 1부터 시작해도 됩니다.) if (result.indexOf(arr[i]) === -1) { // result의 배열에서 arr의 i번째 값 인덱스가 -1인 상태 (없는 상태) 라면 result.push(arr[i]); // result 배열에 해당 arr의 i번째 값을 추가합니다. } if (result.length === k) { // 만약 result의 길이와 k의 길이가 같으면 for문 종료 break; } } while (result.length < k) { // result 배열의 길이가 k보다 작을 경우, 그러니까 k에 미달 되었을 때 result.push(-1); // 남은 빈자리를 -1로 채웁니다. } return result; }
참고로 원래 for문의 첫번째 중복 체크 여부 코드는 아래와 같았습니다.
if (arr[i] !== arr[i-1]) { result.push(arr[i]); }