22.10.26-22.10.30

GunYong·2022년 10월 31일
0

Today I Learned

목록 보기
2/15
post-thumbnail

서론

우테코 5기 프리코스가 시작되었다. 프런트쪽을 공부하고 있었다보니 프런트분야로 지원하였다.

약 4주간 이뤄지는 프리코스로 소홀했던 자바스크립트를 다시 공부하기 좋은 기회였다.

자바스크립트로 웹 구현관련 문제일 줄 알았는데 1주차는 7개의 알고리즘 문제였다.

문제를 풀며 내가 공부하면서 사용했던 개념 정리를 해보려한다.

1. indexOf()

indexOf() 메서드는 배열에서 지정된 요소를 찾을 수 있는 첫 인덱스를 반환하고 존재하지 않으면 -1을 반환한다.

문자열에서 특정 문자의 위치를 찾기 위해서 사용한다. 문자열을 찾을 때 대소문자를 구분한다.

arr.indexOf(a,b)

a : 배열에서 찾을 요소이다.

b (optional) : 검색을 시작할 색인이다. 배열의 길이보다 크기가 크거나 같은 경우 -1을 반환한다. 제공된 값이 음수인 경우에는 배열 끝에서부터 사용된다.

const str = "abab";

console.log(str.indexOf('ab')); // 0
console.log(str.indexOf('ba')); // 1
console.log(str.indexOf('abc')); // -1
console.log(str.indexOf('AB')); // -1

2. Stack

데이터를 집어넣는 선형자료형이다.

나중에 집어 넣은 데이터가 가장 먼저 나온다. (Last in First Out)

데이터를 집어넣는 push / 데이터를 추출하는 pop / 마지막에 넣는 데이터 확인 peak

서로 관계가 있는 여러 작업을 연달아 수행하면서 이전의 작업 내용을 저장해 둘 필요가 있을때 사용

img

중복 문자열 제거 문제 풀때 사용하였다.

3. Dictionary(Object)

흔히 알고 있는 dictionary라는 표현은 파이썬에서 사용하는 용어이기에 JS에서는 object라 불린다.

key / value로 쌍으로 저장하게 되는데 리스트에서 인덱스로 접근과 다르게 key값으로 접근하기 때문에 원하는 값에 쉽게 접근 할 수 있다.

// 선언
const dictionary = {};
// 프로퍼티 추가
dictionary['nickname'] = 'gunyong';
dictionary['age'] = 12;
console.log(dictionary); 
//{age: 12, nickname: "gunyong"}

// key 존재여부 
// boolean 타입으로 return 되기때문에 조건문이나 반복문 사용시 유용하다
if('nickname' in dictionary){
 console.log('im here!')
} // im here!

// 추가, 삭제
dictionary['country'] = 'Korea' // plus
delete dictionary['country'] // delete

// 모든 key / value 가져오는 방법
Object.keys(dictionary);
Object.values(dictionary);

이처럼 key 와 value 를 자유롭게 저장하고 삭제하고 추가하고 가져오고 할 수 있으므로 유용하다

4. 값과 참조 (Value && Reference)

자바스크립트에는 값에 의한 전달과 참조에 의한 전달로 구분된다

원시타입

크게 5가지 (Boolean, Null, Undefined , String, Number)

원시타입이 변수에 할당된다면

const a = 10;
const a1 = a; 
const b = 'abc';
const c = null;	

변수에 = 으로 값이 할당될 때, 새로운 변수에 값을 복사하는 것이다.

같은 값을 가진 변수를 바꾸더라도 다른 변수에는 영향을 안준다.

객체

원시 타입이 아닌 값을 가지는 변수들은 그값으로 향하는 참조(reference)를 가진다. 참조(reference)는 메모리에서 객체의 위치를 가리킨다. 변수가 실제로 값을 가지는 것이 아니라 가리키는 것이다.

우리가 배열을 arr = []이렇게 만들었을때 객체는 메모리 어딘가에 생성된다. 변수 arr이 가리키는 것은 배열이 위치한 주소를 가리키는 것이다.

const arr = [];
arr.push(1); 
console.log(arr) // [1];

변수 arr의 주소(adress)는 변하지 않는다. 배열 arr에 push를 해주게 되면 변수의 값이 바뀌는 것이 아니고 메모리 속의 배열 값만 바뀌는 것이다.

객체가 = 을 사용해서 다른 변수로 복사될 때, 그 값의 주소가 복사되어 저장된다.

const arr = [1];
const arrCopy = arr;
arr.push(2);
console.log(arr, arrCopy); // [1,2],[1,2]
// 2를 메모리 속에 있는 배열에 push 했기에 레퍼런스가 같은 두 변수는 값이 같이 바뀐다.

arr / arrCopy를 출력해보면 모두 [1]을 출력할 것이다. 그야 둘은 같은 주소값을 가지고 있기 때문이다. 두 변수는 같은 배열로 향하는 레퍼런스를 공유하기 때문이다.

느낀점

많이 부족하다. 알고리즘 공부를 꾸준히 해야겠다. 우테코 과정이 끝나는대로 파이썬으로 알고리즘 공부를 다시 시작할 생각이다. 앞으로 남은 3주도 열심히 해봐야겠다.

0개의 댓글