코딩테스트 스택(stack) 문제 - 같은 숫자는 싫어 해결 과정
우리는 일상 생활 속에서도 불필요한 중복을 피하려는 경향이 있습니다. 이는 프로그래밍에서도 마찬가지로, 특히 배열과 같은 데이터 구조를 다룰 때 연속적인 중복을 제거하는 것은 메모리 효율성과 처리 속도를 높이는 데 중요합니다.
"같은 숫자는 싫어" 문제는 이러한 중복 제거의 기본 원리를 이해하고, 실제로 적용해볼 수 있는 좋은 예시를 제공합니다. 이번 글에서는 문제 해결 과정을 통해 배열을 효율적으로 다루는 방법을 배우고, 이를 다양한 프로그래밍 상황에 적용하는 방법에 대해 알아보겠습니다.
코딩테스트 스택 문제 - 같은 숫자는 싫어
▼ 직접 풀어보고 오세요 ▼
문제 소개
주어진 배열에서 연속적으로 나타나는 숫자를 제거하고, 그 결과를 반환하는 문제입니다. 배열의 원소는 0부터 9까지의 숫자로 이루어져 있으며, 연속적인 중복만을 제거한 후 남은 숫자들을 원래 순서대로 배열에 담아 반환해야 합니다.
필자의 해결방법
function solution(arr) {
let answer = [];
for(x of arr) {
if(answer[answer.length-1] !== x) answer.push(x);
}
return answer;
}
이 코드는 입력 배열 arr을 순회하면서, 현재 숫자가 answer 배열의 마지막 요소와 다를 경우에만 answer 배열에 추가하는 방식으로 중복을 제거합니다. 이 로직은 연속적인 중복만을 탐지하고 제거하기 위해 설계되었습니다.
개선할 수 있는 풀이 방법
위의 해결책은 이미 효율적이지만, JavaScript의 고차 함수를 사용하여 더 간결하게 표현할 수 있습니다. 예를 들어, reduce 메서드를 사용하여 같은 기능을 구현할 수 있습니다.
function solution(arr) {
return arr.reduce((acc, cur) => {
if(acc[acc.length-1] !== cur) acc.push(cur);
return acc;
}, []);
}
reduce 메서드는 배열의 각 요소에 대해 주어진 리듀서(reducer) 함수를 실행하고, 하나의 결과값을 반환합니다. 여기서는 누적값 acc에 현재값 cur이 마지막 요소와 다를 때만 추가하는 방식으로 중복을 제거합니다. 이 방식은 초기값으로 빈 배열을 제공하고, 최종적으로 중복이 제거된 배열을 반환합니다.
끝으로
"같은 숫자는 싫어" 문제를 해결하면서 배열 내 연속적인 중복을 제거하는 방법을 배웠습니다. 이러한 문제 해결 기법은 데이터 처리의 효율성을 높이는 데 중요하며, 실제 개발에서도 유용하게 적용될 수 있습니다.
제시된 해결책과 개선 방법 모두 자신의 프로젝트에 적합한 방법을 선택하여 사용할 수 있습니다. 프로그래밍 실력 향상을 위해 다양한 문제에 도전하고, 여러 해결 방법을 시도해보는 것이 중요합니다. 이 과정을 통해 얻은 지식이 여러분의 개발 능력 향상에 도움이 되길 바랍니다.
▼ 아래 문제도 풀어보세요! ▼
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
코딩테스트 최소 힙(MinHeap)을 활용한 "더 맵게" 문제 해결법 (0) | 2024.03.19 |
---|---|
코딩테스트 큐(queue) 문제 - 기능개발 풀이 과정 및 코드 리팩토링 (0) | 2024.03.15 |
코딩테스트 해시(hash) 문제 - 완주하지 못한 선수 문제 원리 및 풀이 (0) | 2024.03.11 |
코딩테스트 해시(hash) 문제 - 폰켓몬 풀이 과정 및 리팩토링 (0) | 2024.03.10 |
프로그래머스 피보나치 수 문제풀이, 해설 (1) | 2024.02.11 |