프로그래머스 Day - 12

ᵁ-ᴷᴺᴼᵂᴺ·2023년 6월 6일
post-thumbnail

1. 리스트 자르기

목표 : 주어진 숫자에 따라 배열 다르게 자르기

//입력(n,  slicer,  num_list)
3,  [1, 5, 2],  [1, 2, 3, 4, 5, 6, 7, 8, 9]
//출력
[2, 3, 4, 5, 6]
function solution(n, slicer, num_list) {
    switch (n){
        case 1:
            return num_list.slice(0, slicer[1]+1);
        case 2:
            return num_list.slice(slicer[0], num_list.length+1)
        case 3:
            return num_list.slice(slicer[0], slicer[1]+1)
        case 4:
            let res = [];
            for(let i = slicer[0]; i<=slicer[1]; i+=slicer[2]){
                res.push(num_list[i])
            }
            return res
    }
}

문제에서의 경우에 따른 조건

  • n = 1 : num_list0번 인덱스부터 b번 인덱스까지 자른다.
  • n = 2 : num_lista번 인덱스부터 마지막 인덱스까지 자른다.
  • n = 3 : num_lista번 인덱스부터 b번 인덱스까지 자른다.
  • n = 4 : num_lista번 인덱스부터 b번 인덱스까지 c간격으로 자른다.
  • 주어진 정수 n에 따라서 다른 케이스로 배열을 잘라야 하기 때문에 switch-case문을 사용하였다.
  • 코드가 복잡해 보이지만 slicer로 주어진 정수배열을 [a, b, c]로 선언하여 간단하게 사용해도 된다.
  • slice()를 사용하여 조건에 맞게 잘라주면된다.

2. 첫 번째로 나오는 음수

목표 : 배열에서 첫 음수의 인덱스번호 구하기

//입력
[12, 4, 15, 46, 38, -2, 15]
//출력
5
function solution(num_list) {
    return num_list.findIndex(el=> el<0)
}
  • findIndex()는 판별 함수를 만족하는 첫 식별자 반환하고, 만족하는 요소가 없으면 -1을 반환한다.
  • 배열의 앞에서부터 순회하는 findIndex()를 사용하여 0보다 작은 요소를 판별함수로 넣어 처음 등장하는 음수의 인덱스를 반환한다.

3. 배열 만들기 3

목표 : 배열에서 추출한 두개의 배열을 새로운 배열로 반환

//입력(arr,  intervals)
[1, 2, 3, 4, 5],  [[1, 3], [0, 4]]
//출력
[2, 3, 4, 1, 2, 3, 4, 5]
function solution(arr, intervals) {
    const [[a1,b1],[a2,b2]] = intervals;
    return [...arr.slice(a1, b1+1), ...arr.slice(a2, b2+1)];
}

주어지는 intervlas는 항상 [[a1, b1], [a2, b2]]의 꼴이다.

  • intervals의 구간을 [[a1, b1], [a2, b2]]로 선언하고, 확장 연산자...를 사용하여 기존 배열에서 추출한 두개의 배열을 이어붙혀 새로운 배열로 만들어 반환한다.

4. 2의 영역

목표 : 배열에서 2사이에 있는 값들을 반환

//입력
[1, 2, 1, 4, 5, 2, 9]
//출력
[2, 1, 4, 5, 2]
function solution(arr) {
    let s = arr.indexOf(2);
    let e = arr.lastIndexOf(2);
    return s==-1 ? [-1] : arr.slice(s, e+1);
}
  • indexOf()는 배열의 에서부터 조건에 맞는 요소의 인덱스를 반환한다.
  • lastIndexOf()는 배열의 에서부터 조건에 맞는 요소의 인덱스를 반환한다.
  • 위 두 개의 메서드는 조건에 맞는 결과를 찾지 못할 때 -1을 기본적으로 반환한다.
  • 이 두개의 메서드를 사용하여 3항연산자로 s의 값이 -1이 아닌가를 검사하여 [-1]을 반환하거나, s부터 e+1까지 자른 배열을 반환한다.

5. 배열 조각하기

목표 : 홀짝 인덱스에 따라 배열을 잘라 반환

//입력(arr,  query)
[0, 1, 2, 3, 4, 5],  [4, 1, 2]
//출력
[1, 2, 3]
function solution(arr, query) {
    for (let i = 0; i < query.length; i++) {
        if (i % 2 === 0) {
            arr = arr.slice(0, query[i] + 1);
        } else {
            arr = arr.slice(query[i]);
        }
    }
  return arr;
}

문제에서의 경우에 따른 조건

  • 짝수 인덱스에서는 arr에서 query[i]번 인덱스를 제외하고 배열의 query[i]번 인덱스 부분을 잘라서 버립니다.
  • 홀수 인덱스에서는 arr에서 query[i]번 인덱스는 제외하고 배열의 query[i]번 인덱스 부분을 잘라서 버립니다.
  • query의 길이만큼 반복하면서, 인덱스 번호를 뜻하는 i가 홀수인지 짝수인지 판별한다.
  • 짝수라면 arr0부터 query[i] + 1까지 자른 결과를 arr에 저장한다.
  • 홀수라면 arrquery[i]부터 인덱스 까지 잘라낸 결과를 arr에 저장한다.
profile
ΔIM ΩΠ ҒULLSTΔCҜ

0개의 댓글