Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- Next
- JS
- csr
- debounce
- customModal component 만들기
- todolist
- 배열
- Redux
- next-pwa
- programmers
- 투두리스트
- lifecycle
- 리덕스
- google firebase
- 겹치는 선분의 길이
- 생명주기
- Firebase
- 넥스트
- JavaScript
- 파이어베이스
- 리액트
- SSR
- react-query
- 달리기경주
- NextJS
- 자바스크립트
- 리엑트
- useMutation
- React
- Recoil
Archives
- Today
- Total
끄적끄적
[Programmers] 햄버거 만들기 (JS) 본문
처음에 문제를 봤을 땐 stack이 바로 떠오르지 않았다.
ingredient의 길이가 1백만 이기에, 만일 for문을 2번 돈다 해도, 시간초과의 늪에 걸릴줄 몰랐다..
잘못된 문제 해결을 먼저 보자.
// 잘못된 접근
let str = ingredient.join('');
while(str.indexOf('1231') !== -1){
if(str.indexOf('1231') !== -1){
answer++;
str.replace('1231', '')
}
}
...
이렇게 되면 만약 최악의 경우를 생각해본다면 n^2의 시간복잡도가 나올 수 있었을 것 같다.
사실 이걸 알았음에도 불구하고 1백만이라는 너무 약하게 본것도 있다.
다시 돌아와 배열을 이용한 stack 의 풀이 방식을 작성했다.
방식은 배열에 한개씩 집어넣으면서, 배열속 마지막 4개가 1231을 만들 수 있는지 확인하여, 만들 수 있다면 배열에서 다시 제거하는 방법이다. 이는 n의 시간복잡도를 갖는다.
// 올바른 풀이
function solution(ingredient) {
var answer = 0;
let stack = [];
for(let i=0; i<ingredient.length; i++){
stack.push(ingredient[i]);
if(stack.slice(-4).join('') === '1231'){
answer++;
stack.splice(-4);
}
}
return answer;
}
'Programmers' 카테고리의 다른 글
[Programmers] 완주하지 못한 선수 (JS) (0) | 2024.01.23 |
---|---|
[Programmers] 신고 결과 받기 (JS) (0) | 2024.01.22 |
[Programmers] 둘만의 암호 (JS) (0) | 2024.01.18 |
[Programmers] 대충 만든 자판 (JS) (0) | 2024.01.18 |
[Programmers] 가장 많이 받은 선 풀이(JS) (0) | 2024.01.10 |
Comments