[JavaScript Algorithm] 배열 탐색 (findIndex, indexOf, find) - DAY 4

Dia Lee·2023년 1월 5일
0

Algorithm

목록 보기
6/7
post-thumbnail

💡 Intro

문제를 하나씩 더 풀어나갈수록 모름에 끝이 없다!
사실 배열 탐색만 기깔나게 잘 해도 문제 반 이상은 더 빨리 풀 듯ㅎ
근데 문제 풀 때 맨날 쓰는 메서드만 쓰는 것 같다.
배열에는 무쟈게 많은 내장함수가 있다는 걸 알고는 있지만 막상 문제 풀 때 생각이 안나는 걸..?ㅎ_ㅎ
그래서 오늘은 배열 탐색과 관련된 자주 쓰이는 메서드 정리!

✅ findIndex

배열의 특정 요소를 찾고 그 Index를 retrun!

🧐 찾는 요소가 없으면 ?
return -1!

코드

let arr = ['a', 'b', 'c', 'd', 'c'];

console.log(arr.findIndex(el => el == 'c')); // 2

console.log(arr.findIndex(el => el == 'f')); // -1

✅ indexOf

배열에서 지정된 요소를 찾을 수 있는 첫 번째 Index를 return!

🧐 찾는 요소가 없으면 ?
return -1!

코드

const beasts = ['ant', 'bison', 'camel', 'duck', 'bison'];

console.log(beasts.indexOf('bison')); // 1

// index 2 부터 탐색
console.log(beasts.indexOf('bison', 2)); //  4

console.log(beasts.indexOf('giraffe')); //  -1

✅ find

파라미터로 전달하는 함수를 만족하는 첫 번째 요소의 값을 retutn!

🧐 그런 요소가 없다면 ?
return undefined!

코드

const array1 = [5, 12, 8, 130, 44];

const found = array1.find(element => element > 10);

console.log(found); // 12
// 130이나 44는 12 나중에 판별하니까 제외!


❓응용문제 (가장 큰 수 찾기)

코딩테스트 연습 - 가장 큰 수 찾기

문제 설명

정수 배열 array가 매개변수로 주어질 때, 가장 큰 수와 그 수의 인덱스를 담은 배열을 return 하도록 solution 함수를 완성해보세요.


제한사항

  • 1 ≤ array의 길이 ≤ 100
  • 0 ≤ array 원소 ≤ 1,000
  • array에 중복된 숫자는 없습니다.

입출력 예

arrayresult
[1, 8, 3][8, 1]
[9, 10, 11, 8][11, 2]

입출력 예 #1

  • 1, 8, 3 중 가장 큰 수는 8이고 인덱스 1에 있습니다.

입출력 예 #2

  • 9, 10, 11, 8 중 가장 큰 수는 11이고 인덱스 2에 있습니다.
function solution(array) {
    let max = Number.MIN_SAFE_INTEGER;
    let index = 0;

    array.filter((item,idx)=>{
        if (item>max) {
            max=item;
            index=idx;
        }
    })

    return [max, index];
}

function solution(array) {
    return [Math.max(...array), array.indexOf(Math.max(...array))]
}

❓응용문제 (문자열 밀기)

코딩테스트 연습 - 문자열 밀기

문제 설명

문자열 "hello"에서 각 문자를 오른쪽으로 한 칸씩 밀고 마지막 문자는 맨 앞으로 이동시키면 "ohell"이 됩니다. 이것을 문자열을 민다고 정의한다면 문자열 A와 B가 매개변수로 주어질 때, A를 밀어서 B가 될 수 있다면 몇 번 밀어야 하는지 횟수를 return하고 밀어서 B가 될 수 없으면 -1을 return 하도록 solution 함수를 완성해보세요.


제한사항

  • 0 < A의 길이 = B의 길이 < 100
  • AB는 알파벳 소문자로 이루어져 있습니다.

입출력 예

ABresult
"hello""ohell"1
"apple""elppa"-1

입출력 예 #1

  • "hello"를 오른쪽으로 한 칸 밀면 "ohell"가 됩니다.

입출력 예 #2

  • "apple"은 몇 번을 밀어도 "elppa"가 될 수 없습니다.
function solution(A, B) {
    let _A=A.split('')
 
 // 애초에 같은 문자열일때 0 return 해야되는 거 나중에 알았다 ㅎㅅㅎ;
    if (A===B) return 0 
    for(let i=0;i<=A.length;i++){
        _A.unshift(_A.pop())
        if(_A.join('')===B) return i+1
    }
    return -1;
}

//풀이 2 허거덩.....indexOf....!
let solution=(a,b)=>(b+b).indexOf(a)

📍 Reference

Array.prototype.findIndex() - JavaScript | MDN

Array.prototype.indexOf() - JavaScript | MDN

Array.prototype.find() - JavaScript | MDN

0개의 댓글