알게된 내용
forEach, Stack, Slice
1. 조건
주어진 배열의 길이는 최대 1,000,000 까지 갈 수 있다.
그래서 좀 시간 초과가 날듯 말듯... 애매했던것같다. 결과적으론 시간초과 났음 ㅋ
순차적으로 배열을 진행시키면서 조건에 맞는 부분들을 빼는것으로
이 문제의 해답은 Stack(스택)을 활용하면 쉽게 풀 수 있다.
2. 풀이 과정
처음에는 진짜 망나니마냥 무식하게 함수 만들어서 while문 뺑뺑이를 돌렸다. 진짜 ㄹㅇ ㅋㅋ
이후에 계속해서 코드를 고쳐나가다가 시간초과를 10개정도에서 4개로 줄였다. 이게 맞나 싶었다.
오랜시간 잡고있다가 이제 다른 풀이를 찾아보았는데 Stack(스택)을 풀면 끝나는 거였다.
굉장히 간단했다.
3. 코드
function solution(ingredient) {
const stack = [];
let result = 0;
ingredient.forEach((value) => {
stack.push(value);
if (stack.length >= 4) {
if (stack.slice(-4).join("") === "1231") {
stack.pop();
stack.pop();
stack.pop();
stack.pop();
result += 1;
}
}
});
return result;
}
solution([2, 1, 1, 2, 3, 1, 2, 3, 1]);
solution([1, 3, 2, 1, 2, 1, 3, 1, 2]);
4. 마무리
그럼 Stack을 써야할지, Queue를 써야할지 어떻게 아냐?
나도 모른다. 차차 감을 익혀나가야지...
이 문제 같은경우는 하나씩 Stack에 요소를 집어넣고
Stack이 일정량 쌓였을때 검사하는 코드를 동작시킨다.
검사가 끝나고 조건에 만족한다면 선입후출 방식으로 요소들을 빼내주고
그렇지 않다면 계속해서 Stack에 요소를 집어넣고 검사하는것을 반복한다.
힘들었지만 나름 재밌었던 풀이였던것같다.
5. forEach
const array1 = ['a', 'b', 'c'];
array1.forEach(element => console.log(element));
// Expected output: "a"
// Expected output: "b"
// Expected output: "c"
6. slice(begin(, end))
end가 생략될 경우 default 값 0이 들어간다.
const animals = ['ant', 'bison', 'camel', 'duck', 'elephant'];
console.log(animals.slice(2));
// Expected output: Array ["camel", "duck", "elephant"]
console.log(animals.slice(2, 4));
// Expected output: Array ["camel", "duck"]
'개발이야기 > 알고리즘' 카테고리의 다른 글
[알고리즘] 프로그래머스 과일 장수 (0) | 2023.02.05 |
---|---|
[알고리즘] 프로그래머스 푸드 파이트 대회 (0) | 2023.02.03 |
[알고리즘] 프로그래머스 옹알이(2) (0) | 2023.02.01 |
[알고리즘] 프로그래머스 숫자 문자열과 영단어 (0) | 2023.01.31 |
[알고리즘] 프로그래머스 콜라 문제 (0) | 2023.01.30 |