분류 전체보기
-
프로그래머스 문제 풀이 위장24년 11월 이전/레거시-프로그래머스-코딩 테스트 고득점 kit 2019. 11. 5. 15:38
문제 URL 위장 Contents 문제 지문 파악하기 구르미의 알고리즘 풀이 문제 지문 파악하기 이 문제에서 중요한 것은 2가지입니다. 입력은 "옷, 파츠" 쌍의 2차원 배열입니다. 옷의 이름은 1개입니다. 이 문제는 "해시 + 경우의 수"로 풀 수 있습니다. 무슨 말이냐, 첫 번째 입력을 보겠습니다. 입력 : [ ["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"] ] 이 들어온 입력에 대해서 { 파츠 : 옷의 개수 } 쌍으로 저장하는 해시를 만들어 줍니다. 입력을 통해 만들어지는 해시 : { "headgear" : 2, "eyewear" : 1 } 이 때, 각 파츠를 조합해서 만들 수 있는 경우의..
-
프로그래머스 문제 풀이 전화번호 목록24년 11월 이전/레거시-프로그래머스-코딩 테스트 고득점 kit 2019. 11. 5. 15:34
문제 URL 전화번호 목록 Contents 문제 지문 파악하기 구르미의 알고리즘 풀이 문제 지문 파악하기 이 문제는 전화번호부에 존재하는 번호 중, 다른 전화번호가 접두어인지 판별하는 문제, 즉 다른 전화번호로 시작하는 전화번호가 있는지, 판별하는 문제입니다. 정말 쉽게 풀면 전화번호부를 2번 순회하여, 해당 번호와 다른 번호를 비교하는 방법이 있습니다. 첫 번째 입력을 통해서 찬찬히 살펴보겠습니다. 입력: ["119", "97674223", "1195524421"] 여기서 "119"를 기준으로 "97674223", "1195524421" 순서대로 시작하는 문자열이 있는지 판별합니다. "119" - "97674223" : 둘 다 서로에게 시작하는 번호로 쓰이지 않음. "119" - "1195524421"..
-
프로그래머스 문제 풀이 완주하지 못한 선수24년 11월 이전/레거시-프로그래머스-코딩 테스트 고득점 kit 2019. 11. 4. 15:23
이 문제는 이시윤 강사님의 프로그래머스 강좌 "파이썬을 무기로, 코딩테스트 광탈을 면하자!"를 보고 정리한 내용입니다. 문제 URL : 완주하지 못한 선수 Contents 문제 지문 파악하기 강사님의 알고리즘 풀이 구르미의 알고리즘 풀이 문제 지문 파악하기 문제에서 중요한 키 포인트는 2가지입니다. 동명이인이 있을 수 있다. 완주하지 못한 사람을 딱 1명이다. 가장 쉽게는 "completion"을 순회하면서, "participant"에서 같은 이름을 삭제하면 됩니다. 동명이인일 경우는 먼저 나온 이름을 삭제하고 그러다보면, 이름이 1개가 남을 것입니다. 코드는 이렇게 될겁니다. #include #include #include using namespace std; string solution(vector ..
-
알고스팟 문제 풀이 FENCE24년 11월 이전/레거시-알고리즘 2019. 10. 25. 11:55
책 "알고리즘 문제 해결 전략"에 나오는 algospot 문제 "FENCE"에 대한 풀이입니다. 목차 문제 해결 전략 - 무작정 풀기 코드 전문 - 무작정 풀기 문제 해결 전략 - 분할 정복 코드 전문 - 분할 정복 FENCE 문제 URL은 다음과 같습니다. FENCE 문제 문제 해결 전략 - 무작정 풀기 먼저, 이 문제를 풀기 위해서 "무작정 풀기" 전략을 선택해 봅시다. 제일 쉬운 방법은 모든 인덱스를 돌면서, 그 높이를 가진 울타리 영역의 최대치를 구하면 됩니다. 무슨 소리냐면, 첫 번째 입력을 예로 살펴봅시다. 이런 울타리에서 첫 번째 판자의 높이로 울타리를 잘라낸다고 하면, 오른쪽 판자의 높이가 자신보다 낮습니다.따라서 다음 영역의 울타리를 잘라낼 수 있습니다. 영역의 너비는 7(7 * 1)이 ..
-
알고스팟 문제 풀이 QUADTREE24년 11월 이전/레거시-알고리즘 2019. 10. 17. 12:32
책 "알고리즘 문제 해결 전략"에 나오는 algospot 문제 "QUADTREE"에 대한 풀이입니다. 목차 문제 해결 전략 코드 전문 QUADTREE 문제 URL은 다음과 같습니다. QUADTREE 문제 문제 해결 전략 제가 이 문제를 해결하기 위해서 체택한 방법은 "분할 정복"입니다. 보통 알고리즘 문제를 해결할 때는 "무식하게 풀기"를 적용한 이후, 문제를 최적화하기 위한 패러다임을 차차 적용하는 것이 좋습니다. 하지만, 위 문제에서는 "분할 정복"을 적용하라는 문구가 이미 적혀져 있습니다. "주어진 공간을 항상 4개로 분할해 재귀적으로 표현하기 때문에 쿼드 트리라는 이름이 붙었는데, (이하 생략)" 4개로 분할해서 재귀적으로 표현한다. 이것은 4군데로 각기 나누어 문제를 해결하라는 소리와 일치합니다..
-
목차24년 11월 이전/레거시-알고리즘 2019. 10. 15. 10:49
Contents 무식하게 풀기 분할 정복 동적 계획법 탐욕법 조합 탐색 최적화 문제를 결정 문제로 바꿔 풀기 수치 해석 정수론 계산 기하 비트 마스크 부분합 선형 자료구조 큐와 스택, 데크 문자열 트리 이진 탐색 트리 우선 순위 큐 구간 트리 상호 배타적 집합 트라이 그래프 깊이 우선 탐색 너비 우선 탐색 최단 경로 알고리즘 최소 스패닝 트리 네트워크 유량 구르미의 "Computer Science 정복하기" 두 번째 프로젝트 알고리즘입니다. 이 문서의 대상 독자는 다음과 같습니다. C++ 혹은 하나의 프로그래밍 언어의 기초를 다지신 분 알고리즘 패러다임과, 자료구조를 이용한 문제 해결 능력을 갖추고 싶으신 분 자신이 푼 해결법과 비교하고 싶으신 분 이 문서는 완벽하지 않습니다. (최선을 다했습니다만.....
-
무식하게 풀기(Brute Force)24년 11월 이전/레거시-알고리즘 2019. 10. 15. 10:46
이 문서는 책 "알고리즘 문제 해결 전략"을 토대로 만들어졌습니다. Contents 무식하게 풀기란? 예제 1 - N까지의 합 예제 2 - N개 중 R개 고르기 결론 무식하게 풀기란? "Computer Science 정복하기" 두 번째 프로젝트 알고리즘의 첫 번째 장 "무식하게 풀기"입니다. 무식하게 푸는 것은 알고리즘 설계의 가장 기초로써, 컴퓨터의 빠른 성능을 이용하여 가능한 경우의 수를 모두 탐색하는 방법입니다. 흔히들 "Brute Force" 혹은 "완전 탐색 알고리즘"이라고 부르는 이 알고리즘 패러다임에 대해서 몇 개의 예제를 통해서 공부해보도록 하겠습니다. 참고적으로 이 알고리즘 패러다임은 문제를 반복되는 작은 조각으로 나누는 것입니다. 이를 위해서 재귀 호출을 이용한 반복문을 주로 이용합니다..
-
알고스팟 문제 풀이 CLOCKSYNC24년 11월 이전/레거시-알고스팟-알고리즘 문제 해결 전략 2019. 10. 12. 11:35
책 "알고리즘 문제 해결 전략"에 나오는 algospot 문제 "CLOCKSYNC"에 대한 풀이입니다. 목차 문제 해결 전략 코드 전문 CLOCKSYNC 문제 URL은 다음과 같습니다. CLOCKSYNC URL 문제 해결 전략 제가 이 문제를 해결하기 위해서 체택한 방법은 "무식하게 풀기"입니다. 여기서 문제의 핵심은 시계는 3, 6, 9, 12 만을 가리킨다는 것입니다. 무슨 말이냐면, 첫 번째 테스트케이스를 살펴봅시다. 0~15번까지 시계의 상태는 다음과 같을 것입니다. 모든 시계를 12시를 가리키기 위해서 최소한의 스위치를 누르는 방법은 다음과 같이 1, 2, 3, 4, 5번 시계와 연결된 8번 스위치를 2번 누르는 것입니다. 순서로 쪼개보면 다음과 같이 서술할 수 있겠지요. 8번 스위치를 1번 누..