Javascript - 프로그래머스 16일차

이율곡·2023년 6월 26일

Programmers

목록 보기
16/44
post-thumbnail

16일차

16일차까지 풀고 87% 달성 및 16문제가 남았다. 4일 동안 4문제씩 풀면 된다. 주말에도 깨작깨작 문제도 보고, 풀어도 보면서 계속 코딩에 대한 감각을 익히고 기르는 것이 매우 중요한 것 같다.


오늘의 문제

2의 영역

정수 배열 arr가 주어집니다. 배열 안의 2가 모두 포함된 가장 작은 연속된 부분 배열을 return 하는 solution 함수를 완성해 주세요.
단, arr에 2가 없는 경우 [-1]을 return 합니다.

예시

arrresult
[1, 2, 1, 4, 5, 2, 9][2, 1, 4, 5, 2]
[1, 2, 1][2]
[1, 1, 1][-1]
[1, 2, 1, 2, 1, 10, 2, 1][2, 1, 2, 1, 10, 2]

이 문제를 선택한 이유는 인덱스 때문이다. 문제를 풀 때 어떻게 풀어야 할까 고민을 하다가, 인덱스가 불연듯 떠올랐기 때문이다. 배열에서 가장 중요한 부분 중 하나가 인덱스인데 이를 순간 잊고 있었다는 사실에 이 문제를 선택했다.

접근방법

문제는 arr에서 2가 모두 포함된 가장 작은 연속된 부분 배열을 찾아야한다. 그래서 가장 큰 핵심은 index다.

  1. 배열 arr을 순회하면서 2가 등장하는 첫 번째 인덱스와 마지막 인덱스를 찾기. 2가 등장하지 않으면 [-1]을 반환.
  2. startIdx와 endIdx를 사용하여 arr에서 해당 부분 배열을 추출.
  3. 추출한 부분 배열을 반환.

이러한 문제의 접근방법으로 문제를 풀었다.

풀이

function solution(arr) {
  const startIdx = arr.indexOf(2);
  const endIdx = arr.lastIndexOf(2);

  if (startIdx === -1 || endIdx === -1) {
    return [-1];
  }

  const result = arr.slice(startIdx, endIdx + 1);
  return result;
}

처음에 나오는 변수는, 첫 번째로 2가 나오는 인덱스와 마지막으로 2가 나오는 인덱스를 찾는 것이다.

다음 조건문을 통해 없으면 -1을 반환한다. 참고로 indexOf()와 lastIndexOf()는 배열에서 반환값이 없을 경우 -1을 반환한다.

마지막으로 첫 번째 2의 인덱스와 마지막의 2의 인덱스를 통해 arr를 잘라 result에 넣어주면 된다.


정리하기

다시 한 주의 시작이다. 첫 날은 한 주를 위해 잠들어 있던 머리를 깨우는 날이기 때문에 오늘 같이 가벼운 문제로 한 주를 시작해보았다. 이번 주가 코딩 기초트레이닝의 마지막이니까 착실하게 끝내보도록 해보자.

profile
음악을 좋아하는 사람이 음악을 만들 듯, 개발을 좋아하게 될 사람이 쓰는 개발이야기

0개의 댓글