코딩 테스트 공부

프로그래머스 자바스크립 코딩 기초 트레이닝 - 가까운 1 찾기 & 첫 번째로 나오는 음수

dev_in 2025. 12. 26. 16:37

문제

정수 배열 arr가 주어집니다. 이때 arr의 원소는 1 또는 0입니다. 정수 idx가 주어졌을 때, idx보다 크면서 배열의 값이 1인 가장 작은 인덱스를 찾아서 반환하는 solution 함수를 완성해 주세요.

단, 만약 그러한 인덱스가 없다면 -1을 반환합니다.

제한사항

  • 3 ≤ arr의 길이 ≤ 100'000
    • arr의 원소는 전부 1 또는 0입니다.

 

고민한 점

 

배열 내의 특정한 값을 찾기 위해 어떻게 반복문을 구성해야 할 지 고민했습니다.

가장 익숙한 for문으로 첫 값을 주어진 정수 idx로 시작해서 arr배열의 길이보다 작으면 1씩늘어나는 식으로 배열을 돌아서 arr[i]의 값이 1과 일치한다면 i를 그대로 return하고 아니면 -1를 return 하는 식으로 구성해보았습니다. 

해결 과정

function solution(arr, idx) {
    for (let i = idx; i < arr.length; i ++) {
        if(arr[i] === 1)
            return i;
    }
    return -1;
}

 

문제는 해결되었지만,  return -1처럼 추가적인 return문을 따로 적는 것이 보기에 좋지 않아 보여습니다.

for문보다 더 간결하게 문제를 해결할 수 있을 거라 생각하고 mdn 및 다른 사람들의 풀이를 참고해봤습니다.

그 결과, findIndxof()메서드를 발견했습니다.

 

findIndex() 메서드

function solution(arr, idx) {
  return arr.findIndex((v, i) => idx <= i && v === 1);
}

 

기본 개념

findIndex(callbackFn)
findIndex(callbackFn, thisArg)

 findIndex() 메서드는 주어진 판별 함수를 만족하는 배열의 첫 번째 요소에 대한 인덱스를 반환하고 만족하는 요소가 없으면 -1을 반환합니다.

 

 

주어진 조건을 만족하는 첫 번째 배열의 요소를 반환하는 것이 아닌, 해당 배열의 인덱스를 반환하는 점과 만족하는 요소가 없을 시 -1를 반환한다는 점이 해당 문제를 해결하는 데 아주 적합하다고 생각했습니다. 

 

응용 문제

비슷한 문제로 배열에서 첫 번째로 나오는 음수 인덱스를 return 하는 '첫 번째로 나오는 음수' 문제가 있었습니다.

해당 문제도 findIndex() 메서드를 통해 쉽고 가독성 좋게 해결할 수 있었습니다.

function solution(num_list) {
    return num_list.findIndex(i => i < 0);
}

 

최종 결과 및 느낀 점

위의 해결 예시 코드의 경우 for문으로 푼 제 해결 방식보다 코드를 줄일 수 있으며 return문도 하나로 가독성도 좋기에 배울 점이 많다고 느꼈습니다.

어떻게든 문제를 해결하기만 하면 된다고도 생각할 수도 있지만, 실제로 팀원들과 프로그램을 만들 때는 코드의 가독성이 매우 중요합니다. 그렇기 때문에 적합한 메서드를 사용하여 읽기 쉬운 코드를 짜는 법을 코딩 테스트를 공부하며 얻어갈 수 있어서 좋은 경험을 하고 있다는 생각이 들었습니다.