프로그래머스 Day - 13

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

1. n 번째 원소부터

목표 : n번째 원소부터 마지막 원소까지 담은 배열을 리턴

//입력(num_list,  n)
[2, 1, 6],  3
//출력
[6]
function solution(num_list, n) {
    return num_list.slice(n-1)
}
  • num_listslice()를 사용하여 n-1부터 마지막 원소까지 자른 결과를 리턴한다.

2. 순서 바꾸기

목표 : n번째 원소 전과 이후의 순서를 바꾸기

//입력(num_list,  n)
[2, 1, 6],  1
//출력
[1, 6, 2]
function solution(num_list, n) {
    return [...num_list.slice(n), ...num_list.slice(0,n)]
}
  • num_list.slice(n) : num_listn부터 마지막 까지 자른다.
  • num_list.slice(0, n) : num_list0부터 n까지 자른다.
  • 이 두개를 확장연산자 ...를 사용하여 두개의 위치를 바꾼 후 반환한다.

3. 왼쪽 오른쪽

목표 : 먼저 나오는 문자에 따라 왼쪽과 오른쪽에 있는 배열의 원소들을 반환

//입력
["u", "u", "l", "r"]
//출력
["u", "u"]
function solution(str_list) {
    for (let i = 0; i < str_list.length; i++) {
        if (str_list[i] === "l") return str_list.slice(0, i);
        if (str_list[i] === "r") return str_list.slice(i + 1);
    }
  return [];
}

문제 설명이 애매하게 돼 있으므로 잘 생각해 봐야한다.

str_list에서 "l""r" 중 먼저 나오는 문자열이

  • "l"이라면 해당 문자열을 기준으로 왼쪽에 있는 문자열들을 순서대로 담은 리스트를 반환
  • "r"이라면 해당 문자열을 기준으로 오른쪽에 있는 문자열들을 순서대로 담은 리스트를 반환
  • str_list의 전체 배열을 순회하는 반복문을 작성한다
  • 반복문 안에서 처음 등장한 문자가 l인지 r인지 판별한다.(두개의 조건문으로 먼저 만족하는 조건의 조건문이 실행되기 때문에 상관없다.)
  • 만약 반복문 안에서 조건을 만족하는 상황을 찾지 못하였을 땐 []를 반환한다.

4. n 번째 원소까지

목표 : 첫번째 원소부터 n번째 원소까지 반환한다.

//입력(num_list,  n)
[2, 1, 6],  1
//출력
[2]
function solution(num_list, n) {
    return num_list.slice(0,n)
}
  • slice() 메서드를 사용하여 잘라낼 시작 인덱스와 마지막 인덱스를 각각 0n으로 넣어주면 첫번째 원소부터 n번째까지 잘라낸 결과를 반환할 수 있다.

5. n개 간격의 원소들

목표 : 배열에서 n개 간격으로 원소를 추출하여 반환

//입력(num_list,  n)
[4, 2, 6, 1, 7, 6],  2
//출력
[4, 6, 7]
function solution(num_list, n) {
    return num_list.filter((_, i) => !(i % n))
}
  • filter()메서드를 사용하여, in으로 나누었을 때, 나누어 떨어지는 경우에만 필터링 조건을 만족시키게 된다.
  • 즉, n의 배수인 인덱스 만 필터링하여 반환한다.
    ( filter에서 사용된 _는 생략의 기호이다. 즉, 현재 요소를 고려하지않고 인덱스만 사용하겠다는 뜻이다. )
profile
ΔIM ΩΠ ҒULLSTΔCҜ

0개의 댓글