반응형

IT 125

동적 타입 언어

C언어와 같은 정적 타입 언어는 변수를 선언할 때 무조건 변수에 할당될 데이터의 타입을 정해주어야 한다. 그러므로 해당 변수에는 선언된 데이터 타입의 값만 할당할 수 있다. 이는 컴파일 시에도 데이터 값이 선언된 타입과 맞는지 확인하여 맞지 않으면 오류를 보내게 된다. 이처럼 데이터 타입에 강제성을 부여하면 훨씬 안정적인 코드를 작성할 수 있다. 이에 반에 자바 스크립트나 파이썬과 같은 동적 언어들은 변수의 재할당에서 자유롭다. 이는 해당 변수가 어떠한 데이터 타입이든 가질 수 있다는 것을 의미한다. 이는 편리하다는 장점이 있지만, 반대로 단점 또한 존재한다. 자유로운 데이터 타입 변화는 코드가 복잡할수록 변수의 데이터 타입 추적에 어려움을 겪게 만든다. 이 때문에 오류를 뿜어내기도 하는 것이다. 따라서..

IT/Study 2021.11.23

프로그래머스) 구명보트

https://programmers.co.kr/learn/courses/30/lessons/42885 코딩테스트 연습 - 구명보트 무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. 예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 5 programmers.co.kr 나의 풀이) 이번 풀이는 내가 풀지 못하였다. 즉 질문하기 란에 사람들이 질문하고 답변한 것에서 힌트를 많이.. 얻어 풀었다는 뜻이다. 문제에 나와있듯 이 알고리즘은 탐욕법 알고리즘이다. 즉 모든 부분에서의 최적해를 구하는 것이 아닌 그 상황에서의 최적해를 구한다는 뜻이다. 나는 이중 for문, while문, 재귀 함수를 사용하여 테스..

IT/Algorithm 2021.11.23

객체 지향 프로그래밍 기본 용어

Object Oriented Programing (OOP)의 기본 아이디어는 단순하고 직관적이다. 객체는 데이터와 기능을 논리적으로 묶어 놓은 것이다. OOP는 우리가 사물을 이해하는 자연스러운 방식을 반영하도록 설계되었다. 만약 자동차가 객체라면 그 데이터에는 제조자, 모델, 차량 번호와 같은 것들이 있을 것이다. 그 기능으로는 변속, 문 열기와 같은 것들이 있을 것이다. 그렇다면 비유를 통해 OOP의 기본 용어에 대해 알아보자. 클래스는 '어떤 자동차'처럼 추상적이고 범용적인 것이다. 인스턴스는 특정 자동차처럼 구체적이고 한정적인 것이다. 기능은 메서드라고 부른다. 클래스에 속하지만 특정 인스턴스에 묶이지는 않는 기능을 클래스 메서드라고 부른다. 예시로 시동을 거는 기능은 클래스 메서드라고 부를 수 ..

IT/Study 2021.11.23

프로그래머스) 큰 수 만들기

https://programmers.co.kr/learn/courses/30/lessons/42883 코딩테스트 연습 - 큰 수 만들기 programmers.co.kr 나의 풀이 function solution(number, k) { const numArray = [...number]; const stack = []; while (numArray.length) { if (k > 0 && stack[stack.length - 1] < numArray[0]) { stack.pop(); k -= 1; continue; } stack.push(numArray.shift()); } return stack.slice(0, stack.length - k).join(""); } 하지만 테스트 코드 10번을 계속 실패하..

IT/Algorithm 2021.11.21

MVC 디자인 패턴

MVC 패턴이란? Model, View, Controller 즉 MVC는 소프트웨어 공학에서 사용되는 소프트웨어 디자인 패턴이다. 이 패턴은 사용자 인터페이스로부터 비즈니스 로직을 분리하여, 애플리케이션의 시각적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있다. 비즈니스 로직이란? 회원 가입을 예로 들어보자. 아이디 중복 검사를 해야 할 때 크게 두 영역으로 나눌 수 있다. 하나는 중복 아이디가 있는지 없는지를 검사하기 위한 일련의 과정 또 다른 하나는 유저에게 단순히 텍스트나 다이얼로그로 알려주는 것이 있다. 두 번째 영역은 View 영역 또는 Presentation 영역이라고 불리는데, 가공된 데이터를 단순히 표시만 해주는 것이다. 데이터 ..

IT/Computer Science 2021.11.15

[자료구조] linked list와 array의 차이

요소 접근 (탐색 및 조회) array는 random access를 지원한다. - random access란? : O(1)의 시간에 인덱스를 통해 모든 배열 요소에 액세스 할 수 있는 것을 의미한다. 따라서 배열은 특정 배열 요소에 접근하는 시간 복잡도이 O(1)이다. linked list는 sequential access를 지원한다. - 어떤 요소에 접근할 때, 처음부터 순차적으로 접근하며 찾아야 한다. - 특정 요소에 접근할 때의 시간 복잡도는 O(n)이 된다. 저장 방식 array에서 요소들은, 인접한 memory의 위치에 저장된다. linked list에서 새로운 요소들은, 각각 memory 어딘가에 저장된다. 새로운 요소의 memory 위치 주소는 linked list의 이전 node에 저장된다..

IT/Computer Science 2021.11.14

자료구조 - Graph

Graph node와 edge로 구성된 한정된 자료구조이다. node는 정점이며 edge는 정점 간의 간선이다. 그래프는 방향성이 있을 수도, 없을 수도 있다. 인접 리스트 인접 리스트로 그래프를 표현하는 것이 가장 일반적인 방법이라고 한다. 인접 리스트는 그래프 내에 적은 숫자의 간선만을 가지는 경우에 용이하다고 한다. 각각의 정점에 인접한 정점들을 리스트로 표시한 것이다. 배열이나 연결 리스트 등을 이용해서 구현이 가능하다. 특징으로는 연결된 간선의 정보만을 저장하여 공간 효율성은 우수하지만 각 정점들의 연결 여부 확인을 위해 O(n)의 시간 복잡도를 가진다. 인접 행렬 인접 행렬은 정점들을 2차원 배열로 나타낸 것이다. 인접 행렬은 그래프에 간선이 많이 존재하는 밀집 그래프의 경우에 용이하다. 단점..

IT/Computer Science 2021.11.12

Hash - 오버플로우 처리 방법

먼저 해시 함수가 가져야 할 특징 3가지가 있다. 충돌이 적어야 한다. 해시 테이블에 고르게 분포시킬 수 있는 주소의 연산 값이 나와야 한다. 이는 곧 1번을 충족할 수 있다. 계산이 빨라야 한다. 위 3가지를 고루 갖추지 못한다면 100개의 버킷 중에 하나의 버킷만 나와서 오버플로우가 발생하는 참사가 일어날 수 있다. 위의 특징을 고루 갖춘 함수 중 하나로 제산 함수라는 것이 있다. 제산 함수 레코드(키) 값을 소수로 나누어 나머지 값을 주소로 지정하는 해시 함수. ex) h(k) = k % 7 만약 위 특징을 갖춘 해시 함수를 만들었는데도 오버플로우가 발생한다면? 내가 아는 선에서 두 가지의 방법이 있다. 선형 탐사법 (Linear Probing) 분리 연결법 (Separate Chaining) 1...

IT/Computer Science 2021.11.12

자료구조 - Hash

해시 다양한 길이를 가진 데이터를 고정된 길이를 가진 데이터로 매핑한 값 *매핑 : 하나의 값을 다른 값으로 대응시키는 것 탐색 하나 이상의 필드로 구성된 레코드의 집합에서 원하는 레코드를 찾는 것 *탐색을 위하여 사용되는 자료 구조 : 배열, 연결 리스트, 트리, 그래프 또한 레코드들의 집합을 테이블(Table)이라고 부른다. 테이블에서 레코드들을 어떻게 구분할까? 레코드마다 서로 구별되는 키를 가지고 있는데 이것을 탐색키라고 부른다. 의미 있는 단위를 이끌어 내기 위해서 하나의 필드를 가진 레코드만으로는 부족하다. 따라서 맵이라는 개념을 끌어온다. 맵 탐색키 그리고 탐색키와 관련된 값의 쌍을 말한다. 즉, 두 가지 필드를 가진 키를 가진 레코드 또는 엔트리로 이루어진다. 이 두 가지 값은 key, v..

IT/Computer Science 2021.11.12

Doubliy Linked List

연결 리스트의 변형된 형태인 이중 연결 리스트는 다음 노드의 포인터만 가지고 있는 단일 연결 리스트와 달리 다음 노드, 2개의 연결 포인터를 가지고 있다. 따라서 양방향으로 리스트 순회가 가능하여 어떤 노드라도 그의 이전, 이후 노드를 찾아갈 수 있다. 이중 연결 리스트의 삭제 시 프로세스는 다음과 같다. 단일 연결 리스트와 비슷하나 previous 속성을 가진다는 차이가 있다.

IT/Computer Science 2021.11.11
반응형