반응형
프로그래머스 LV1 > 연습문제 > 햄버거 만들기
[문제해결]
1. 순회하며 n, n+1, n+2, n+3 값이 1,2,3,4 가 되는지 확인한다.
2. 조건을 만족하면 splice(i, i+4) 해주면서 원본배열에서 1,2,3,4 를 날린다.
3. 햄버거 count를 1 추가한다.
** 메모리 낭비를 주의하며, 배열의 처음부터 다시 카운팅하지 않도록 한다.
루프 혹은 포문 돌려서 체크하면 되겠구나.
별로 안어렵네.... 라고 생각했으나... ingredients의 최대 갯수가 1,000,000개다.
일단 문제 흐름을 파악하고 코드를 짰다.
function solution(ingredient) {
const hamburger = '1231'
let ingredientStr = ingredient.join('');
let count = 0;
const makeHamburger = () =>{
if(ingredient && ingredientStr.includes(hamburger)){
ingredientStr = ingredientStr.replace(hamburger,'');
count += 1
makeHamburger();
} else return null
}
makeHamburger();
return count
}
실패 (signal: aborted (core dumped))
왜 안되지..?
생각을 해보니 계속 hamburgur string이 있는지 다시 처음부터 체크를 하게 되니, 메모리 낭비가 심하겠구나 싶었다.
그래서 n 부터 n+3까지 1,2,3,1인지 확인하는 방식으로 다시 코드를 짰다.
function solution(ingredient) {
let count = 0;
for(let i = 0; i<ingredient.length; i ++){
if(ingredient[i] == 1 && ingredient[i+1] ==2 && ingredient[i+2] ==3 && ingredient[i+3] ==1){
ingredient.splice(i, 4);
count += 1
if(i==0){
i -= 1
} else if(i==1){
i-=2
} else if(i >= 2) {
i-=3
}
}
}
return count
}
코드를 조금 손보자면 아래와 같이 바꿔줄수 있겠다.
// 한칸씩 확인하는 이부분을
ingredient[i] == 1 && ingredient[i+1] ==2 && ingredient[i+2] ==3 && ingredient[i+3] ==1
// 이렇게 바꿔줄수 있을것이고
ingredient.slice(i, i+4).join('') == '1231'
// i의 최소값을 무조건 0이상이 되도록 맞춰주기위한 코드인 이 부분을 i-=3로 해도 된다.
// splice는 음수값이 들어갈 경우, 배열의 끝에서부터 거꾸로 카운팅 한다.
if(i==0){
i -= 1
} else if(i==1){
i-=2
} else if(i >= 2) {
i-=3
}
메모리 낭비를 항상 생각하자.
반응형
'[IT] 프로덕트 개발 > Coding Test - 코딩테스트' 카테고리의 다른 글
[LV1] 기사단원의 무기 (0) | 2022.11.21 |
---|---|
[LV1] 옹알이2 / while() (0) | 2022.11.15 |
[LV1] 콜라 문제 / 수학적 계산이 전부인 while() (0) | 2022.11.15 |
[LV1] 삼총사 / 3중 for문 (0) | 2022.11.13 |
[LV1] 푸드파이트 대회 / reverse() (0) | 2022.11.13 |