코딩테스트 일기장
[프로그래머스 코딩테스트 연습] 햄버거 만들기 문제 javascript (정답포함)
yong_zz
2022. 11. 7. 14:45
프로그래머스 코딩테스트 연습문제 Lv1 햄버거 만들기 문제 리뷰합니다
이게 레벨 1 문제라고?? 할 정도로 고생했던 문제입니다 ㅠㅠ (내가 이렇게 바보라니..)

문제를 처음 보는 순간 레벨1 답게 간단하구만? ㅋㅋ (자만함)
처음 생각은 앞에서부터 1231을 지워서 그 개수를 return하면 문제 없겠구만 이라는 생각을 가지고
배열을 문자열로 변환해서 앞에서부터 replace 한뒤 그 개수를 return하면 되겠다. 옳다구나! 싶어서 후다닥 코딩을 함
1차 replace 사용
function solution(ingredient) {
let answer = 0;
let str = ingredient.join("");
while( true ){
if(str.indexOf(1231) > -1){
str = str.replace(/1231/, "");
answer ++;
}else{
break;
}
}
return answer;
}
이렇게 코딩 후 제출 해보니.. 띠용? 시간 초과로 실패하였음..
순간 멘붕옴.. 뭐가.. 이렇게 시간이 오래 걸리지? 루프도 몇번 안돌텐데... 라고 생각하고 시간을 오래잡아먹는 녀석으로 의심되는 replace 함수에 대해 검색을 시작해봤는데 역시 문제는 replcae 함수가 문제였음..
replace 함수의 시간 복잡도는 O(n) 으로 문자열이 길면 길수록 오래걸린다고 한다..
이후에는 배열로 루프 돌리면서 삽질을 하기 시작함.. (아무 생각없이 막 코딩 시작..)
30~40분정도 삽질을 한 뒤에 깨닳음..
새로운 배열에 한개씩 push를 하고.. 1231 조건이 완성이 되면 pop을 하면 되겠구나! 싶어서 바로 코딩 시작
완성본
function solution(ingredient) {
let answer = 0;
let length = ingredient.length;
let arr = [];
for( i=0; i<length; i++){
arr.push(ingredient[i]);
let arr_length = arr.length;
if(arr_length >= 4){
if(arr[arr_length-1] == 1 && arr[arr_length-2] == 3 && arr[arr_length-3] == 2 && arr[arr_length-4] == 1)
{
arr.pop()
arr.pop()
arr.pop()
arr.pop()
answer ++;
}
}
}
return answer;
}
역시.. 기본기가 너무나 부족한 나에게는 삽질이 필수인것같고
이 문제는 레벨1이 아닌거 같다.. (적어도 나에게는..ㅠ)