본문 바로가기

Web Development/algorithm

(11)
[Algorithm] 퀵정렬 1. 무엇인가? 리스트에서 피벗(하나의 요소)을 기준으로 작은 값은 왼쪽, 큰 값은 오른쪽에 정렬한다. 정렬된 두 부분에서 다시 피벗을 설정하고, 작은 값은 왼쪽, 큰 값은 오른쪽에 정렬한다. 위 과정을 더 이상 리스트를 분할할 수 없을 때까지 진행한다. 2. 어떻게 사용하는가? 1. 리스트 내부에서 기준이 될 피벗(요소)을 선택한다. 2. 피벗을 기준으로 피벗보다 작은 요소들은 피벗의 왼쪽으로 옮기고, 피벗보다 큰 요소들은 피벗의 오른쪽로 옮긴다. 3. 피벗을 제외한, 왼쪽의 부분 리스트, 오른쪽의 부분 리스트를 같은 방식으로 다시 정렬한다. 분할된 부분 리스트에 대하여 재귀 호출을 이용하여 정렬을 반복한다. 4. 부분 리스트들이 더 이상 분할이 불가능할 때까지 반복한다. 퀵정렬의 경우 평균적으로 nl..
[Algorithm] 무거운 알약 찾기 알약이 담긴 악병 10개가 있다. 이 중 9개의 병에 들어있는 알약의 각 무게는 1.0g인데, 1개의 병에는 1.1g짜리 잘못 만들어진 알약이 있다. 눈금 저울 하나가 주어졌을 때, 단 한번만 저울을 써서, 무거운 알약을 찾는 방법은 무엇일까? 1 대 1로 각 알약을 비교하면 무거운 알약을 쉽게 찾을 수 있겠지만, 저울을 한 번만 쓸 수 있다는 전제가 있으므로, 해당 방법은 쓸 수 없다. 먼저 약병에 숫자를 쓴다. 1번, 2번, 3번, 4번, 5번, 6번, 7번, 8번, 9번, 10번 그리고 각 약병에 적힌 숫자만큼의 알약을 꺼낸다. 그 알약을 모두 더한 후 저울에 올린다. 만약 1번이 무거운 알약이었다면, 1.1 * 1 + 1 * 2 + 1* 3 + 1* 4 + 1 * 5 + 1* 6 + 1* 7 + ..
[Algorithm] 프로그래머스(햄버거 만들기) 문제 풀이 햄버거 만들기 문제 설명 햄버거 가게에서 일을 하는 상수는 햄버거를 포장하는 일을 합니다. 함께 일을 하는 다른 직원들이 햄버거에 들어갈 재료를 조리해 주면 조리된 순서대로 상수의 앞에 아래서부터 위로 쌓이게 되고, 상수는 순서에 맞게 쌓여서 완성된 햄버거를 따로 옮겨 포장을 하게 됩니다. 상수가 일하는 가게는 정해진 순서(아래서부터, 빵 – 야채 – 고기 - 빵)로 쌓인 햄버거만 포장을 합니다. 상수는 손이 굉장히 빠르기 때문에 상수가 포장하는 동안 속 재료가 추가적으로 들어오는 일은 없으며, 재료의 높이는 무시하여 재료가 높이 쌓여서 일이 힘들어지는 경우는 없습니다. 예를 들어, 상수의 앞에 쌓이는 재료의 순서가 [야채, 빵, 빵, 야채, 고기, 빵, 야채, 고기, 빵]일 때, 상수는 여섯 번째 재료..