[알고리즘] 해시
·
알고리즘
해시는 해시 함수를 사용해서 변환한 값을 인덱스로 삼아 키와 값을 저장해서 빠른 데이터 탐색을 제공하는 자료구조이다.보통은 인덱스를 활용하지만 해시는 키와 데이터를 일대일 대응하여 저장하므로 키를 활용해 데이터에 바로 접근한다.해시의 특징단방향으로 동작: 키를 통해 값을 찾을 수 있지만 값을 통해 키를 찾을 수는 없다.찾고자 하는 값을 O(1)로 찾음: 키 자체가 해시 함수에 의해 값이 있는 인덱스가 되므로 값을 찾기 위한 탐색 과정이 불필요.값을 인덱스로 활용하려면 적절한 변환 과정을 거쳐야 한다.해시를 사용하는 경우와 사용하지 않는 경우는 이렇게 차이가 난다. 해시를 활용하면 순차 탐색할 필요 없이 해시 함수를 활용해 특정 값이 있는 위치를 바로 찾을 수 있어 효율이 좋다.해시 테이블: 키와 대응한 ..
[알고리즘] 스택과 큐
·
알고리즘
스택스택의 어원: ‘쌓는다’선입후출 or FILO(First In Last Out): 먼저 들어간 것이 마지막에 나오는 규칙스택에 삽입하는 연산은 푸시, 꺼내는 연산은 팝파이썬의 경우 직접적으로 스택을 제공하진 않지만 대안으로 리스트에 append()메서드와 push()메서드로 스택을 대체할 수 있다.덱(deque)은 양쪽에서 데이터를 삽입하거나 삭제할 수 있는 자료구조다. 이런 특징을 응용하면 한쪽으로만 동작하는 스택처럼 사용할 수 있다.스택의 ADT푸시(push): 데이터 푸시팝(pop): 최근에 푸시한 데이터 팝하고, 그 데이터 반환가득 찼는지 확인(isFull): 스택에 들어 있는 데이터 개수가 max size인지 boolean비었는지 확인(isEmpty): 스택에 들어 있는 데이터가 하나도 없는..
[알고리즘] 배열
·
알고리즘
배열 배열은 차원과 무관하게  컴퓨터 메모리 구조에 따라 1차원 공간에 연속 할당된다. 배열은 임의 접근이라는 방법으로 배열의 모든 위치에 있는 데이터에 단 한 번에 접근할 수 있다. 따라서 데이터에 접근하기 위한 시간 복잡도는 O(1)이다. 맨 뒤에 삽입할 경우: O(1)맨 앞/중간에 삽입할 경우: O(N)(N은 밀어야하는 데이터 개수) 배열 선택 시 주의사항: 시간 복잡도 뿐만이 아니라 메모리 크기도 확인하자.할당할 수 있는 메모리 크기를 확인해야 한다. 데이터가 너무 많으면 런타임에서 배열 할당에 실패할 수 있다. 보통 정수형 1차원 배열은 1000만 개, 2차원 배열은 3000 * 3000 크기를 최대로 생각.중간에 데이터 삽입이 많은지 확인해야 한다. 맨 앞/중간에 데이터를 빈번하게 삽입하면 시..
[코딩테스트] 파이썬의 기본 자료형
·
알고리즘
파이썬의 자료형은 크게 숫자(numbers), 시퀀스(sequence), 매핑(mapping) 등으로 나눌 수 있다.숫자(numbers): 숫자를 나타내는 자료형으로는 정수(int), 부동소수점수(float), 복소수(complex)가 있다.시퀀스(sequence): 문자열(str), 리스트(list), 튜플(tuple), 사용자 정의 클래스가 시퀀스에 속한다.매핑(mapping): 딕셔너리(dict)는 키(key)와 값(value)의 짝으로 이뤄집니다. 이런 것을 매핑이라고 한다.불(bool): 참, 거짓을 표현하는 불(bool)도 있다.세트(set): 집합을 표현하는 세트(set)도 있다.자료형의 큰 종류는 위와 같고 자세한 자료형별 문법 사항은 아래의 링크를 참고해서 온전히 체득할 때까지 수시로 열..
[코딩테스트] 알고리즘 문제풀이 전략
·
알고리즘
앞으로 공부하게될 "코딩 테스트 합격자 되기" 서적의 내용을 정리해보면서 코딩 테스트를 본격적으로 준비해보려 한다. 문제풀이에 앞서 앞으로 다음과 같은 문제풀이 전략을 기반으로 체계적으로 문제풀이를 해나가면 좋을 것 같다. 전체 시간의 50 ~ 60%는 문제 분석에 할애하자문제를 동작 단위로 쪼개서 분석하자제약 사항을 파악하고 테스트 케이스를 추가하자입력값을 분석하여 주어진 제한시간을 고려한 시간복잡도에 맞는 알고리즘을 선택하자핵심 키워드를 파악하여 알고리즘을 선택하자데이터의 흐름이나 구성을 파악하여 적절한 자료구조를 선택하자의사코드로 사전에 설계하자의사코드는 프로그램 언어가 아닌 자연어세부 구현이 아닌 동작 중심으로 작성하자문제 해결 순서로 작성하자구현 단계로 갈수록 수정이 상당히 어려워지므로 의사코드..
[알고리즘 문제] 하샤드 수
·
알고리즘
내가 푼 정답 function solution(x) { var answer = true; var y = String(x) var temp = 0 for (i = 0; i < y.length; i++) { temp += Number(y[i]) } if ( x % temp !== 0) { answer = false } return answer; }
[알고리즘 문제] 시저 암호
·
알고리즘
내가 푼 정답 function solution(s, n) { var answer = ""; let order = [ "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", ]; s = s.split(""); for (i = 0; i 25 ? order.indexOf(s[i]) + n - 26 : order.indexOf(s[i])..
[알고리즘 문제] 신규 아이디 추천
·
알고리즘
내가 푼 정답 function solution(new_id) { // 1단계 new_id = new_id.toLowerCase(); // 2단계 let new_id_temp = new_id; var pattern1 = /[0-9]/; //숫자 var pattern2 = /[a-z]/; //영어 for (i = 0; i < new_id_temp.length; i++) { if ( pattern1.test(new_id_temp[i]) | pattern2.test(new_id_temp[i]) | (new_id_temp[i] === "-") | (new_id_temp[i] === "_") | (new_id_temp[i] === ".") ) { } else { new_id = new_id.replace(new_i..