코딩테스트 4

쓰이는 알고리즘 - 그래프 알고리즘 기초(BFS, DFS, 최단경로 알고리즘, 백트래킹)

알고리즘에서 그래프는 실제 세계의 현상이나 사물을 정점, 노드, 간선으로 표현하여 나타내기 쉽다. 따라서 경로, 방법 탐색 등의 각종 문제 해결의 상황에서 자주 활용된다. 본 포스팅에서는 그래프와 관련된 기초 용어는 다루지 않으니 궁금한 사람은 구박사님(=구글링)께 물어보도록 하고, 그래프 공부를 하며 정리하는 과정에서 얻은 insight를 공유하고자 한다. 1. BFS(너비 우선 탐색 = 형제 우선) - 정점들과 같은 레벨에 있는 노드들을 먼저 탐색하는 방식 - 그래프를 나타내기 위해 각 노드를 Key, 그리고 각 key와 간선으로 연결된 노드를 관리하는 list를 value로 가지는 map활용 - 앞으로 방문할 노드를 관리하는 큐(need_visit), 방문했던 노드를 관리하는 큐(visited), ..

쓰이는 알고리즘 - Recursive Call (재귀 호출) 언제 쓸까?

1. 재귀 호출이란? - 함수 안에서 동일한 함수를 호출하는 형태 - 어떤 상황에서 하나의 큰 문제가 여러 개의 같은 작은 문제로 분할(분할 정복)하여 해결가능한 경우 사용됨 - function(n)의 결과 값에 function(n-1)이 포함된 경우 - 동일한 process를 쪼개고 쪼개다 보면 멈춰지는 지점이 있음 (러시아 인형이랄까.. 인형안에 인형. 인형안에 인형...) 2. 재귀 호출의 패턴 public int function(arg){ if (arg > n){ return function(arg-1); } else{ return m; } } public int function(arg){ if (arg

쓰이는 자료구조 - Hash Table

1. 왜, 해시 테이블인가? - 해시: 어떤 값을 고정된 길이로 변환하는 것 - 해싱 함수(Hashing Function): Key에 대해 산술 연산(고정된 길이로 변환)을 수행하여 데이터 위치를 찾을 수 있는 값을 출력하는 함수 - 해시 값(=해시 주소): Key를 해싱 함수로 연산하여 얻은 값. 이를 기반으로 해시 테이블에서 Key에 대한 데이터 위치를 찾을 수 있다. - 해시 테이블: K(=Key, 키)에 V(=Value, 데이터)를 저장하는 데이터 구조 -> 빠른 검색을 할 수 있다. 그 과정을 예로 들어볼까. 실제로는 복잡하겠지만, 이해를 위해 간단하게 예를 들어보겠다. - 해싱 함수: K % 8 - 해시 테이블 크기: 8 (8개의 데이터를 저장할 수 있는 공간) 전화번호부가 있다. 총 8명의 ..

쓰이는 자료구조 - Array, Stack, Queue

모든 학문이 그렇듯, CS(Computer Science)역시 base가 잘 잡혀있어야 그를 기반으로 응용해나갈 수 있다. 백엔드 개발을 예로 들어볼까. 유저(클라이언트)를 대상으로 어떤 서비스를 제공하는 시스템을 개발하고 싶다. 그러기 위해선, 시스템을 구축하기 위한 Framework 기술을 알아야하고, 이를 배포 및 운영할 수 있는 Server 지식도 알아야하며, 데이터 관리를 위한 기술도 알아야한다. 그 중에서 가장 중요한 내용은 뭘까. 우리의 목표는 고객을 대상으로 "서비스"를 제공하는 것이라 했는데, 앞서 말했던 정보들은 서비스를 제공하기 위한 "수단"으로써 필요한 내용들이다. 본질은 "서비스"이다. 이 서비스를 비지니스 로직에 따라 처리될 수 있도록 구현하는 능력. 이는 자료구조 및 알고리즘에..