TIL: 알고리즘, javascript

hihyeon_cho·2022년 11월 15일
1

TIL

목록 보기
12/101

Algorithm

Stack ( 스택 )

: 한 쪽 끝으로만 자료를 넣고 뺄 수 있는 구조.
( 맨 꼭대기에 새로운 데이터를 넣고, 빼는 구조 )

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

class Stack:
    def __init__(self):
        self.head = None

    # 맨 꼭대기에 새로운 데이터를 넣기
    def push(self, value):
        new_head = Node(value)
        new_head.next = self.head
        self.head = new_head
        return

    # 맨 꼭대기에 있는 데이터를 뽑아서 반환하기
    def pop(self):
        if self.is_empty():
            return "Stack is empty"
        delete_head = self.head
        self.head = self.head.next

        return delete_head
        
	# 가장 꼭대기에 있는 데이터를 반환
    def peek(self): 
        if self.is_empty():
            return "Stack is empty"
        return self.head.data

    # isEmpty 기능 구현 : 빈 건지 아닌지 확인
    def is_empty(self):
        return self.head is None

Queue ( 큐 )

: 한쪽 끝으로 자료를 넣고, 반대쪽에서는 자료를 뺄 수 있는 구조.
( 끝에 새로운 데이터를 넣고, 앞에서 자료를 빼는 구조 )

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

class Queue:
    def __init__(self):
        self.head = None
        self.tail = None
        
    # 끝에 새로운 데이터 넣기
    def enqueue(self, value): 
        new_node = Node(value)
        if self.is_empty():
            self.head = new_node
            self.tail = new_node

        self.tail.next = new_node
        self.tail = new_node
        return


	# 맨 앞에서 데이터를 빼서 반환하기
    def dequeue(self): 
        if self.is_empty():
            return "Queue is Empty"
        delete_head = self.head
        self.head = self.head.next

        return delete_head.data
	
    # 가장 꼭대기에 있는 데이터를 반환
    def peek(self):
        if self.is_empty():
            return "Queue is Empty"
        return self.head.data
	
    # isEmpty 기능 구현 : 빈 건지 아닌지 확인
    def is_empty(self):
        return self.head is None

Javascript

Math.floor

: Math.floor()함수는 항상 내림하고 주어진 숫자보다 작거나 같은 가장 큰 정수를 반환한다. ( 소수점아래 버림 = 몫 나타내기 )

//5a와 b를 10으로 나눈 몫을 더하는 answer을 반환하는 과정
function solution(a, b) {
    let answer = (5*a) + (Math.floor( b / 10));
    return answer;
}

reverse / sort

: 배열을 정렬하는 method.
sort는 순서대로 정렬해주고, reverse는 역순으로 정렬해준다.

//배열의 내용을 뒤집은(역순으로 정렬한) 배열 answer을 반환
function solution(num_list) {
    let answer = num_list.reverse()
    return answer;
}

//배열의 내용을 순서대로 정렬한 배열 answer 반환
function solution(num_list) {
    let answer = num_list.sort()
    return answer;
}

concat

: 인자로 주어진 배열이나 값들을 기존 배열에 합쳐서 새 배열을 반환한다.

const arr1 = ['a', 'b', 'c','d'];
const arr2 = ['e', 'f', 'g', ];
const arr3 = arr1.concat(arr2);

console.log(arr3);
// expected output: Array ["a", "b", "c", "d", "e", "f","g"]

splice

: 배열의 기존 요소를 삭제 또는 교체하거나 새 요소를 추가하여 배열의 내용을 변경하는 method
문법( 생활코딩 ) : array.splice(index(, howmany(삭제할 개수), element1, ...., elementN);

let arr = ['a', 'b', 'c', 'd', 'e'];
arr.splice( 1 , 0 ,'f')
//index 1번째 자리에 'f'를 추가해라
console.log(arr);
// => ['a', 'f', 'b', 'c', 'd', 'e'];

let list = ['a', 'b', 'c', 'd', 'e'];
list.splice( 2, 1 , 'h', 'i')
//index 2번째 자리에 하나('c')를 삭제하고, 'h'와 'i'를 추가한다.
console.log(list)
//=>['a', 'b', 'h', 'i', 'd', 'e']

shift

: shift() method는 배열에서 첫 번째 요소를 제거하고, 제거된 요소를 반환한다.

let arr = ['a', 'p', 'p', 'l', 'e'];
li.shift(); //'a'
console.log(arr);
// => ['p', 'p', 'l', 'e']

unshift

: unshift() method는 새로운 요소를 배열의 맨 앞쪽에 추가하고, 새로운 길이를 반환합니다.

let li = [ 'a', 't'];
li.unshift('c');
console.log (li)
=> ['c', 'a', 't']

오늘은 stack과 que자료구조 공부하고, 생활코딩강의 보면서 자바스크립트 복습하면서 문법내용도 보충해보는 시간도 가졌다. 그리고 프로그래머스로 자바스크립트 문제도 몇 개 풀어봤는데, 풀면서 뭔가 '이건 이렇게 풀면 되겠다.' 하는 느낌도 살짝(?) 온 것 같아서 뿌듯한 기분이 들었던 하루였다.

매일 자바스크립트랑 파이썬만하다가 html,css 다 까먹을 것 같아서 여러가지 한 번 만들어 보는 시간도 가져봐야겠다 ! :-)

profile
코딩은 짜릿해 늘 새로워 ✨

1개의 댓글

comment-user-thumbnail
2022년 11월 16일

fifo lifo 로 큐스택 개념도 찾아보시면 도움 되실거에요!
어제도 고생하셨습니다 ㅎㅎ

답글 달기