코딩테스트 광탈 방지 A to Z
재료- 데이터
도구 - 자료구조
레시피 - 알고리즘
요리사 -개발자
요리- 소프트웨어
손님 - 소프트웨어 이용자
자료구조 + 알고리즘 = 프로그램
연관된 데이터를 연속적인 형태로 구성된 구조를 가진다. 배열에 포함된 원소는 순서대로 인덱스(index) 가 붙는다.
중간에 요소를 삭제하거나 추가할 시, O(n) 선형시간이 소요된다.
그러므로 요소 삭제나 추가가 반복되는 로직이라면 배열 사용을 권장하지 않는다.
Javascript 에서 배열 사용법
배열 생성 방법
Source
// 빈 Array를 생성
const arr1 = new Array () ;
const arr2 = [ ];
// 미리 초기화된 Array를 생성
let arr2 = [1, 2, 3, 4, 5];
// 많은 값을 같은 값으로 초기화할 경우
let arr3 = Array(5).fill(0);
// 특정 로직을 사용하여 초기화할 경우 from을 사용할 수 있음
let arr4 = Array. from({ length: 100 ), (_. i) => i);
Output
[]
[]
[1, 2, 3, 4, 5]
[0, 0, 0, 0, 0]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
const arr = [1, 2, 3];
// 끝에 4 추가
arr.push(4);
// 여러 개를 한 번에 추가 가능
arr.push(5, 6);
//[1,2,3,4,5,6]
// 3번 인덱스에 128을 추가
arr.splice(3, 0, 128);
//[1,2,3,128,4,5,6]
//3번 인덱스 값을 제거
arr.splice(3, 1);
console.log(arr [3]);
// [4]
자바스크립트의 배열은 인덱스가 숫자가 아닌 문자열이나, 논리값도 들어갈 수 있다. 이는 자바스크립트의 배열이 근본적으로 객체타입이기 때문이다. 인덱스와 무관한 값을 인덱스로 사용한 경우 길이에 영향을 미치지 않는다.
이러한 코드는 좋은 코드는 아니다. 이러한 특징이 있다는 것만 알아두고 넘어가자
const arr = [1,1,2,3]
console.log(arr,length)
// 4
arr["string"] = 10;
arr[false] = 0;
console.log(arr)
// [1,1,2,3, string:10 , false:0]
console.log(arr.length)
// 4
arr [4] = 5
console.log(arr.length)
// 5
const arr = [1,2,3,4,5]
arr.length = 3
console.log(arr); // [1,2,3]
const arr1 = new Array(); // [ ]
const arr2 = [ ]; // [ ]
const arr3 = [1,2,3,4,5] // [1,2,3,4,5]
const arr4 = new Array(5); // [<5 empty items>]
const arr5 = new Array(5),fill(5); // [5,5,5,5,5]
const arr6 = Array.from(Array(5), function (v,k) {
return k+1;
});
console.log(arr6) // [1,2,3,4,5] → v = 배열의값, k = 배열의 인덱스
// join
console.log(arr.join(",")); //1,2,3,4,5
// reverse → reverse 함수는 한번 변경되면 원래 함수에도 영향을 미치므로 주의해서 사용해야한다.
console.log(arr.reverse()); // [5,4,3,2,1]
// concat
const arr1=[1,2,3,4,5,6];
const arr2=[7,8,9,10];
console.log(arr1.concat(arr2)); // [1,2,3,4,5,6,7,8,9,10]
// pop, push, shift, unshift → 뒤에 원소 삭제, 추가 / 앞에 원소 삭제, 추가
// slice → 배열 중간의 잘라서 값을 알고싶다 & 사용 후에도 원래의 배열에는 영향을 끼치지 않음
const arr = [1,2,3,4,5,6];
consle.log(arr.slice(2,4) // [3,4] → index 2번째부터 ~ 4번째 앞 원소까지 잘라낸다.
// splice → 중간의 배열을 삭제하고 싶다
const arr = [1,2,3,4,5,6];
console.log(arr.splice(2,2) // [1,2,5,6] → 2번 index 부터 2개를 삭제한다.
const arr = [1,2,3,4,5,6];
for ( var i =0 ; i < 6; i += 1) {
console.log(arr(i);
}
// 1,2,3,4,5,6
for (const item of arr) {
console.log(item);
}
// 1,2,3,4,5,6
객체 생성
const obj1 = new Object( ); // { }
const obj2 = { }; // { }
const obj = {name: 'amy’ , age: '29'};
// 객체 추가
obj["email"] = "wlgysdl3@naver.com"
[obj.phone](http://obj.phone) = “01000000000"
// 객체 내 정보 삭제
delete obj.phone;
// in operator 를 이용하여 key 가 있는지 확인하기.
console.log("email" in obj); // true
console.log("phone" in obj); // false
// 객체 내 key 와 value 집합 구하기
console.log(Object.keys(obj) // ["name", “age", “email"] → 배열의 형태로 key 나옴
console.log(Object.values(obj) // ["amy", “29", “wlgysdl3@naver.com"] → 배열의 형태로 value 나옴
const obj = { name: 'amy' , age: '29'};
for ( const key in obj) {
console.log(key, obj[key]);
}
// name amy
// age 29
// email wlgysdl3@naver.com