이번 문제를 풀면서 일전에 쓰던 sort 메서드의 콜백 함수의 쓰임에 대해서 좀 더 자세히 알 수 있었던 시간이었는데요. check를 false로 설정한 후 해당 값이 조건에 맞을 경우(현재 값보다 뒤의 값이 클 경우) result 배열에 담아주고 check를 true(찾았다는 의미)로 할당하고, 조건에 맞지 않는 경우(또 하나의 if문을 써준 이유는, 처음 조건문에서 else문을 써버리면 같은 것들도 포함되기 때문에 else문을 생략)
못 찾은 상태(check는 false)이므로 -1을 배열에 푸쉬해주는 로직으로 깔아 넣었는데 음... 시간 초과가 뜨더라고요. 나름 shift랑 while문 연습한다고 했는데 시간 초과가 좀 떠서 이중 for문으로 shift를 쓰는게 아니라 그냥 인덱스를 고르는 방법을 사용했는데 이것도 시간 초과가 뜨더라고요... 분명 맞긴 하지만 효율성 측면에서는 좀 떨어지므로 알아보니 '스택'이랑 객체를 활용해야 하더라고요?
흠... 지금까지는 알고리즘을 안쓰고 최대한 풀어봤는데 level2로 넘어오니 확실히 알고리즘 공식 없이는 한계가 느껴지기 시작했습니다. 알고리즘 공부를 또 이어가야 하는 순간인 듯 합니다...!
// 1번 답안 - while문 이용 function solution(numbers) { let result = []; let num = 0; while(numbers.length > 0){ num = numbers.shift(); let check = false; for(let i = 0 ; i < numbers.length ; i++ ){ if(num < numbers[i]) { result.push(numbers[i]) check = true; break; } } if(check === false) result.push(-1) } return result; } // 2번 답안 - 2중 포문 이용 function solution(numbers) { let result = []; let check = false; for(let i = 0; i < numbers.length ; i++){ let check = false; for(let j = i+1; j < numbers.length ; j++){ if(numbers[i] < numbers[j]){ result.push(numbers[j]); check = true; break; } } if(check === false) result.push(-1) } return result; }