반응형
❓ 문제: 가까운 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만 사용하니 더 빠르겠지 하고 속도를 비교해보니 역시 빠르다.
메서드를 여러번 쓴 경우를 보니 확실히 반복은 줄이는 방향으로 해야겠다.
덕분에 오늘도 하루 배워간다
랭킹도 9,478위로 생각보다 빠르게 올라가고 있어서 기분은 좋지만
한편으론 내가 그 정도 실력은 아니라고 느껴져서 더 열심히 공부하는 걸로.
모두 즐코하세요-!
반응형
'코딩 생활 > 코딩테스트' 카테고리의 다른 글
[프로그래머스 | JS] 레벨 0. 세 개의 구분자 (feat. [], {}은 true다) (0) | 2023.04.26 |
---|---|
[프로그래머스 | JS] 레벨 0. 원소들의 곱과 합 (0) | 2023.04.24 |
[프로그래머스 | JS] 레벨 1. 예산 (feat. 내부적인 오류....) (0) | 2023.04.14 |
[프로그래머스 | JS] 레벨 0. 특이한 정렬 (feat. sort()) (0) | 2023.04.14 |
[프로그래머스 | JS] 레벨 0. 중복된 문자 제거 (feat. Set 객체) (0) | 2023.04.12 |
댓글