[항해99] 9일차 TIL - 배열 변경하기

김헤일리·2022년 11월 22일
0

TIL

목록 보기
6/46
  • 현재 알고리즘 주차를 지나면서, 프로그래머스의 알고리즘 문제들을 풀고있다.

  • 아직 lv.1 문제들만 풀다보니 나오는 문제들이 정해진 패턴대로 나오는데, 그 중 배열을 이해해야 풀 수 있는 문제가 굉장히 많았다.

  • 그때그때 필요한 부분을 구글링 해서 사용했지만, 일단 가장 자주 까먹었던 배열을 변경하는 방식을 정리 해야겠다.

  • 자세한 출처는 MDN


1. 배열의 요소 삭제

  • 배열의 요소를 삭제하는 방식은 여러가지지만, 그 중 splice()를 가장 많이 사용했다.

  • arr.splice (index, delete, alternate)

    • index = 삭제할 요소(들)가 시작되는 자리 수
    • delete = 삭제되어야할 요소들의 수
    • alternate = 삭제된 요소 대신 들어가야할 요소
    • 예시:
let arr = [4,3,2,1] 
// 주어진 배열의 값이 arr일 때, 배열의 최소값을 삭제하고 배열을 새롭게 반환한다. 만약 배열의 요소가 1개면 (-1) 반환

const min = Math.min.apply(null, arr);// 배열에서 최소값을 반환해주는 메소드
const index = arr.indexOf(min) // 최소값의 인덱스를 '인덱스'라는 변수에 넣었다

for (let i = 0; i < arr.length; i++){
    if (arr.length ===1){ // 만약 배열의 길이가 1일 경우, 
        arr.splice(0,1,-1) 
      // 이 부분에서 splice를 사용했는데, 0번째 요소를 1개 삭제하고, 삭제한 자리에 -1을 추가한다.
    } else{ // 배열의 길이가 1이 아닐 경우,
        arr.splice(index,1)
      // 이 부분에서 사용한 splice를 index번째의 요소를 1개 삭제한다는 뜻
    }
}
  • 사용할 곳이 많으니 사용 방식과 형식을 잊지말자.

2. 배열의 순서 정렬

  • 배열의 순서를 정리하는 방법도 여러가지겠지만, 그 중 sort()를 가장 많이 사용했다.
  • arr.sort( function(a, b) {})
    • function(a,b) = 정렬할 조건을 작성할 수 있는 함수
    • 예시:
let n = 118372 
// n이 자연수일때, 각 자릿수를 큰 것부터 작은 것으로 정렬해서 새로운 정수가 반환되어야 한다.
function solution(n) { 
    var answer = 0;
    let str = n.toString() 
    // n을 일단 문자열로 변경하고, 변경된 값을 str이라는 변수에 정의. 현 상태: '118372'

    let arr = []
    // arr 이라는 변수에 빈 배열을 넣어놓고,
    for (let i = 0; i < str.length; i++){
        arr.push(Number(str[i])) 
      // 비어있던 배열에 str에 있던 문자열을 1개씩 숫자로 변환해서 추가. 현 상태: [118372]
    }

    let reversed = arr.sort(function(a,b){ // 여기서 sort 메소드 사용
        return b-a
    }) // reversed라는 변수에 배열을 새로 정렬해서 할당.
    // 정렬 시 내림차순이 되도록 function(a,b)가 반환하는 값을 b-a로 설정했다. (a-b일 경우 오름차순)

    answer = +reversed.join("") // 그리고 재정렬된 배열에서 배열을 없애고 일반 숫자로 변경
    
    return answer; //현 상태: 873211 (숫자들이 내림차순으로 정렬됨)
}

3. 배열의 재정렬

  • 배열을 원하는 조건으로 다시 정렬하거나 수정할 때 사용한다.
  • arr.filter (callback [element, index, array]))
    • callback = 함수 실행 시, 해당 함수의 리턴값이 true인 요소들로만 새로 배열을 만든다.
    • element = 처리할 요소
    • index = 처리할 요소의 인덱스
    • array = filter()가 적용된 배열
    • 예시:
let arr = [1,2,3,4,5,6,7,8,9,10] // 배열을 선언

let even = function(number){ // even이라는 변수에 매개변수에 들어온 값들이 짝수일때만 반환하는 함수를 생성했다.
  return (number%2 ===0);
}

let evenArr = arr.filter(even); // filter()를 이용해서 배열 안에 들어있는 요소들이 짝수일때만 반환하게 만들었다.

// [2,4,6,8,10]


아직 알아야할 부분은 굉장히 많지만, 검색했을 때 가장 흔하게 나오기도 했고, 가장 많이 사용한 위주로 일단 정리했다.
앞으로도 하나씩 추가해가면서 정리해두면 나중에 구글링 하지 않고 내가 작성한 글로만 해결할 수 있을까?

최소한 가장 자주 쓰거나 검색됐던 애들만이라도 정리해둬야겠다!

알고리즘 모의고사는 생각보다 쉬웠지만,,, 아직 풀어보지 못 한 알고리즘이 굉장히 많다 ㅠㅠ

어서 빨리 끝내고 다시 언어 공부 해야지 💪

profile
공부하느라 녹는 중... 밖에 안 나가서 버섯 피는 중... 🍄

0개의 댓글