코딩테스트 광탈 방지 A to Z

AtoZ

재료- 데이터

도구 - 자료구조

레시피 - 알고리즘

요리사 -개발자

요리- 소프트웨어

손님 -  소프트웨어 이용자

자료구조 + 알고리즘 = 프로그램

연관된 데이터를 연속적인 형태로 구성된 구조를 가진다. 배열에 포함된 원소는 순서대로 인덱스(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