본문 바로가기

분류 전체보기120

카카오 블라인드 공채 2차시험 후기 카카오 2차 코딩테스트 문제보기 [http://tech.kakao.com/2017/10/24/kakao-blind-recruitment-round-2/] 10월 14일 바로 어제, 카카오 블라인드 테스트 2차 코딩테스트가 있었습니다. 1차 코딩테스트가 알고리즘 문제였기 때문에 2차 역시 난이도 조금 높은 알고리즘 문제가 나올거라고 생각했습니다. 그러나 시험 3일전.. 메일이 한통 왔네요. 2차에서는 REST API와 JSON Parser가 필요합니다. 여러 회사에서 코딩테스트를 진행하지만 이런 경우는 처음이라 조금 당황했습니다ㅠ 그리고 또 다른 추가안내 메일이 왔습니다. 1. 로컬 피씨에서 시스템을 구현하는 방식입니다. 따라서 코딩은 본인 컴퓨터에서 익숙한 언어와 환경으로 진행하면 됩니다. 2. 문제는 .. 2017. 10. 16.
세마포어(Semaphore)와 뮤텍스(Mutex) 여러 쓰레드들은 자원을 공유하고, 프로세스간 메시지를 전송하면서 간혹 문제가 발생할 수 있습니다. 즉, 공유된 자원에 여러 프로세스 , 쓰레드가 동시에 접근하면서 문제가 발생합니다. 공유된 자원 속 하나의 데이터는 한번에 하나의 프로세스만 접근할 수 있도록 제한해 두어야 할 필요성이 있는데이를 위해 고안된 것이 Semaphore(세마포어)입니다. 유명한 화장실 예제로 쉽게 설명해보겠습니다. 공중 화장실은 한번에 1명만 사용할 수 있다고 가정하겠습니다.어떤 사람이 사용하고 있는데 다른 누군가가 갑자기 들어와서 같이 쓰자고 하면... 생각만해도 이상하지요..?이를 막기 위해 화장실 열쇠를 만들 수 있습니다.열쇠를 가지고 있는 한 사람만 화장실을 이용하고, 열쇠가 없는 사람은 밖에서 대기를 하죠. 여기서 열쇠.. 2017. 10. 13.
메모리 관리기법, 페이징과 세그멘테이션 메모리의 용량은 한정적이므로 여러 응용 프로그램의 사용을 위해 효율적인 메모리 관리 기법이 필요합니다. 메모리 관리기법을 효율적으로 사용하여 외부 및 내부 단편화를 해결할 수 있습니다. 메모리 관리기법은 여러가지 있는데 그 중 가장 많이 쓰이는 것은 가상 메모리관리 기법입니다. 이와 관련된 페이징 , 세그멘테이션기법을 살보겠습니다. Paging(페이징) 물리메모리를 사용할 때, 페이지를 고정크기의 프레임단위로 나눕니다.논리메모리도 같은 프레임단위인 페이지로 나누어 프레임과 페이지를 대응하게 하여연속적인 물리메모리가 아니더라도 원하는 크기의 프레임을 사용할 수 있도록 하는 기능입니다. 프레임(Frame) : 물리 메모리를 일정한 크기로 나눈 블록페이지(Page) : 가상 메모리를 일정한 크기로 나눈 블록 .. 2017. 10. 9.
외부단편화와 내부단편화 외부단편화 (External fragmentation) 프로그램을 할당하고 난 다음 아주 작은 크기로 남은 조각들이 생겨 사용할 수 없는 작은 공간들이 많이 생길 수 있습니다. 이 공간들을 합치면 요구되는 공간을 할달할 수 있음에도 불구하고 연속적인 공간이 아니라서 할당하지 못하는 상황을 외부 단편화라고 합니다. 아래 그림을 통해 살펴보겠습니다. 프로세스 A,B,C사이의 총 8K의 공간이 남아있습니다. 프로세스 D는 7K의 공간을 필요로 하므로, 남은 공간은 충분합니다. 그러나 분할하여 할당할 수 없으므로 프로세스D를 할당할 수 없는 문제가 발생합니다. 내부단편화 (Internal fragmentation) 메모리를 할당하는 최소 블록 크기를 10K라고 가정합시다. 만약 7K만큼의 공간을 사용하더라도 1.. 2017. 10. 7.
BOJ 1753 최단경로 BOJ 1753 최단경로[https://www.acmicpc.net/problem/1753] 다익스트라를 적용할 수 있는 기본문제입니다. 아래 주소에 다익스트라에 관한 설명과 본 문제의 테스트케이스를 이용한 예제를 확인할 수 있습니다.[http://sycho-lego.tistory.com/7] 우선순위 큐를 이용하여 다익스트라를 구현하였습니다. 정답코드는 아래 주소에서 확인할 수 있습니다.[https://github.com/choseungyoon/Algorithm/blob/master/BOJ/1753_%EC%B5%9C%EB%8B%A8%EA%B2%BD%EB%A1%9C.cpp] 2017. 10. 6.
다익스트라 알고리즘(Dijkstra) 다익스트라 알고리즘(Dijkstra Algorithm) 그래프 내에서 최단경로를 정하는 알고리즘은 여러가지가 있습니다. 그 중 다익스트라는 하나의 정점에서 다른 모든 정점까지의 최단 경로를 구할 때 사용됩니다.또한 모든 간선의 가중치가 양의 가중치를 가지고 있을 때 사용할 수 있습니다. 다익스트라의 기본적인 원리는 한 정점에서 갈 수 있는 다른 정점 중, 작은 가중치 간선을 우선적으로 탐색하는 방법입니다. 현재 정점을 A라 하고, A와 연결된 가선이 B라고 가정해 봅시다. A까지 이동하는 비용을 a , B까지 이동하는 비용을 b , A에서 B로 이동할 때 발생하는 비용 x 라 할 때a+x < b 라면B까지 가는 비용을 a+x로 갱신할 수 있습니다. 아래 예제를 통해 더 자세히 알아보겠습니다. 위와 같은 .. 2017. 10. 6.
스트래티지 패턴(Strategy Pattern) 스트래티지 패턴(Strategy Pattern) 여러 알고리즘을 하나의 추상적인 접근점(인터페이스)을 만들어이 접근점에서 서로 교환가능하도록 하는 패턴 또한 알고리즘을 정의하고 각각을 캡슐화하여 교환해서 사용가능 하도록 하는 패턴 이와 같이, 각 알고리즘은 캡슐로 정의되어 있고 필요할 때 서로 교환만 하기 때문에알고리즘의 추가 및 수정에 편리합니다. 아래는 기본적인 Strategy 패턴을 나타냅니다. Client는 Strategy를 가지고 있습니다. Strategy는 한개를 가질 수도 있고 여러개를 가질 수 있습니다.Strategy 인터페이스를 통해 세 개의 Strategy(A,B,C)가 캡슐화되어 있음을 알 수 있습니다. 이와 같이 각 알고리즘은 캡슐화되어 분리되어 있고 만약 StrategyA에 수정이.. 2017. 10. 5.
BOJ 11811 데스스타 BOJ 11811 데스스타 [https://www.acmicpc.net/problem/11811] 비트연산을 이용하는 문제입니다. 모든 행렬의 값은 각 행 , 열의 and연산으로 이루어져 있기 때문에 각 행의 모든 값을 or연산하면 답을 유추할 수 있음을 쉽게 알 수 있습니다. 모든 j에 대해서ans[i] = ans[i] | arr[i][j] 아래 주소에서 정답코드를 확인할 수 있습니다.[https://github.com/choseungyoon/Algorithm/blob/master/BOJ/11811_%EB%8D%B0%EC%8A%A4%EC%8A%A4%ED%83%80.cpp] 2017. 10. 4.
프로세스(Process)와 쓰레드(Thread) 프로세스와 쓰레드가 각각 무엇인지, 어떤 차이점이 있는지 알아보겠습니다. 한 문장으로 설명하면 다음과 같습니다. 프로세스는 운영체제로부터 자원을 할당받는 작업의 단위, 스레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위 그림으로 나타내면 아래와 같습니다. [Process]프로세스는 운영체제로부터 주소공간, 파일, 메모리 등을 할당 받습니다.그러므로 각 프로세스는 독립적이며 자신만의 고유 메모리를 할당받아 사용합니다. 그리고 프로세스는 실행중인 프로그램을 의미합니다. 그러므로 프로세스는 프로그램이 될 수 있지만, 프로그램은 프로세스가 될 수 없습니다. 실행중이지 않은 프로그램도 존재하기 때문입니다. [Thread]그러나 쓰레드는 프로세스 안에 존재하며, 여러 쓰레드가 자원을 공유할 수 있습니다. 쓰레.. 2017. 10. 4.
반응형