프로그래머스에서 JS를 활용한 코딩테스트를 하는 과정에서 더 좋은 코드를 구현할 수 있는 방법을 배웠습니다. 그것들을 여기에 써볼려고 합니다.
📌 동일한 코드가 여러번 사용될 때는 함수를 만드는 것이 좋습니다.
코딩테스트를 처음 시작 했을 때 코드를 쭉~ 나열하면서 시간 초과로 실패한 경험들이 많으실텐데
함수를 활용하면 시간초과로 실패하던 문제를 가볍게 성공할 수 있게 됩니다.
JS의 기본 상식! function을 사용한 일반 함수와 화살표 함수의 차이점을 잘 알고 알맞게 사용하시는 걸 추천드립니다.
추천 참고 자료: 자바스크립트 5. Arrow Function은 무엇인가? 함수의 선언과 표현
출처: 드림코딩 엘리
📌 반복문 안에서 indexOf와 splice를 되도록이면 시간이 덜 걸리는 것으로 대체하면 좋습니다.
저의 경우에선 코딩테스트를 하면서 코드 길이보단, indexOf나 splice를 활용해서 시간 초과로 실패한 경험이 많습니다.
햄버거 만들기라는 문제를 풀었을 때 실제 값이 들어있는 변수보단, 따로 비어있는 변수를 활용해서 값을 순차적으로 1개씩 넣고 조건에 맞으면 값을 바로 제거하면서 시간을 많이 단축할 수 있었습니다.
아래는 제가 직접 구현한 코드입니다.
function solution(ingredient) {
let answer = 0;
// 식재료를 저장할 변수입니다. 이렇게 비어있는 변수로 시간을 단축합니다.
let stack = [];
// stack에 식재료를 1개씩 추가합니다.
// 식재료 순서대로 햄버거를 만들어야 하기 때문에
// 마지막에 들어온 데이터를 기준으로 해당 stack에 햄버거를 만들 수 있는 식재료가 있는지 확인합니다.
// 햄버거를 만들 수 있다면, 사용한 식재료는 즉시 stack에서 삭제하고
// answer에 1을 추가합니다.
ingredient.forEach(v => {
stack.push(v);
const stack_length = stack.length;
if(stack[stack_length - 4] === 1 && stack[stack_length - 3] === 2 && stack[stack_length - 2] === 3 && stack[stack_length - 1] === 1) {
for(let i=0; i<4; i++) {
stack.pop();
}
answer++;
}
});
return answer;
}
stack을 사용하지 않았더라면 ingredient에 indexOf와 splice를 사용했어야 할 것입니다.
그러나 stack을 활용하면 더 코드가 간편해지고 그 덕분에 시간도 단축할 수 있었습니다.
이러한 유형의 문제가 많으니 상황에 알맞게 사용하셔서 좋은 결과가 있길 바라겠습니다.
📌 변수명과 함수명의 의미를 정확하게 표현하는 것이 좋습니다.
정답을 맞추는 것도 중요하지만 코딩 테스트를 하는 이유는 코드를 잘 구현하는 것과 사용한 변수가 왜 필요한지, 어떤 역할을 하는지 의미를 명확하게 나타내줘야 합니다.
프로그래머스에서 다른 사람의 풀이를 통해 똑같은 문제에서 나와 어떻게 다른지, 만약 좀더 표현을 잘 한 것 같다면 그 속에서 배워나가면 됩니다.
추천하는 다른 사이트도 있는데 가볍게 읽어보고 직접 코드에 적용해보면 이해하기 더 쉬울 것입니다.
추천 자료: 유니티 - 깔끔하고 보기 좋은 변수명 짓기
출처: Rito15
📌 결론
이렇게 코딩테스트를 풀면서 배운 점들을 정리해보았습니다. 저에게 아주 도움이 많이 된 것들이라서 혹시나 이걸 보는 분께도 도움이 많이 되길 바랍니다.
'코딩테스트' 카테고리의 다른 글
백준 입출력 문제 - try except문 활용(Python) (0) | 2023.11.25 |
---|---|
백준 입출력 문제 - map 함수 (Python) (0) | 2023.11.17 |
sorted와 lambda 활용 (0) | 2022.02.13 |
List 활용 (0) | 2022.02.04 |
Python 조건문 (0) | 2022.02.01 |