본문 바로가기
코딩 생활/코딩테스트

[프로그래머스 | JS] 레벨 0. 가까운 1 찾기 (feat. mdn 사이트를 잘 살피자)

by everyhahaha 2023. 4. 25.

❓ 문제:  가까운 1 찾기

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

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

📝 문제 풀이

주어진 인덱스부터 for문으로 순회하면서 해당 인덱스를 찾을지

아니면 배열을 복사해서 찾을지 고민했다.

 

분명 배열을 특정 인덱스부터 탐색하는 효율적이고 간단한 방법이 있을 것 같아서 구글링해봤지만

괜히 힌트만 보게 될까봐 적극적으로 찾진 못했다.

mdn 사이트를 살펴보다가 for문이 더 빠를 것 같았지만

뭔가 프로그래머스는 줄이 짧을수록 점수를 더 주는 것 같아서 slice와 indexOf로 풀기로 했다...

사실 둘 다 코드가 효율적이거나 예쁘진 않아서 마음에 들진 않았다

 

function solution(arr, idx) {
    // for문으로 특정 인덱스부터 탐색
    for (let i = idx; i < arr.length; i++) if (arr[i]) return i;
    return -1;

    // slice()로 주어진 인덱스부터 시작하는 배열을 복사하고 
    // indexOf()로 1이 있는지 탐색, 없으면 -1 반환
    return arr.slice(idx).indexOf(1) < 0 ? -1 : arr.slice(idx).indexOf(1) + idx;

}

 

다른 분들은 어떻게 했는지 바로 보러갔다.

 

const solution = (arr, idx) => arr.indexOf(1, idx);

// indexOf()의 문법을 보면 arr.indexOf(찾을요소[, 검색을시작할인덱스])이기 때문에
// 특정 인덱스부터 탐색이 가능하다 (대괄호 안쪽 요소는 생략 가능)

 

아 역시.... 특정 인덱스부터 탐색하는 방법이 있었다ㅜㅜ

indexOf의 반환값만 보고 넘겼는데 조금 더 살펴볼걸..........

 

indexOf만 사용하니 더 빠르겠지 하고 속도를 비교해보니 역시 빠르다.

메서드를 여러번 쓴 경우를 보니 확실히 반복은 줄이는 방향으로 해야겠다.

 

(왼쪽) indexOf만 사용 (중간) 메서드 사용 (오른쪽) for문 사용


덕분에 오늘도 하루 배워간다 

랭킹도 9,478위로 생각보다 빠르게 올라가고 있어서 기분은 좋지만

한편으론 내가 그 정도 실력은 아니라고 느껴져서 더 열심히 공부하는 걸로.

 

모두 즐코하세요-!

댓글