현재 알고리즘 주차를 지나면서, 프로그래머스의 알고리즘 문제들을 풀고있다.
아직 lv.1 문제들만 풀다보니 나오는 문제들이 정해진 패턴대로 나오는데, 그 중 배열을 이해해야 풀 수 있는 문제가 굉장히 많았다.
그때그때 필요한 부분을 구글링 해서 사용했지만, 일단 가장 자주 까먹었던 배열을 변경하는 방식을 정리 해야겠다.
자세한 출처는 MDN
배열의 요소를 삭제하는 방식은 여러가지지만, 그 중 splice()
를 가장 많이 사용했다.
arr.splice (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개 삭제한다는 뜻
}
}
sort()
를 가장 많이 사용했다.arr.sort( 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 (숫자들이 내림차순으로 정렬됨)
}
arr.filter (callback [element, index, array]))
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]
아직 알아야할 부분은 굉장히 많지만, 검색했을 때 가장 흔하게 나오기도 했고, 가장 많이 사용한 위주로 일단 정리했다.
앞으로도 하나씩 추가해가면서 정리해두면 나중에 구글링 하지 않고 내가 작성한 글로만 해결할 수 있을까?
최소한 가장 자주 쓰거나 검색됐던 애들만이라도 정리해둬야겠다!
알고리즘 모의고사는 생각보다 쉬웠지만,,, 아직 풀어보지 못 한 알고리즘이 굉장히 많다 ㅠㅠ
어서 빨리 끝내고 다시 언어 공부 해야지 💪