알고리즘 98

[Dijkstra] BOJ 13907 세금

문제 링크 : www.acmicpc.net/problem/13907 13907번: 세금 첫 번째 줄에 세 정수 N (2 ≤ N ≤ 1,000), M (1 ≤ M ≤ 30,000), K (0 ≤ K ≤ 30,000)가 주어진다. 각각 도시의 수, 도로의 수, 세금 인상 횟수를 의미한다. 두 번째 줄에는 두 정수 S와 D (1 ≤ S, D ≤ N, S ≠ D www.acmicpc.net 문제에서 제시된, "세금이 인상될 때 최단거리가 갱신되는 경우"란 무엇일까? 세금이 인상되지 않았을 때 최단거리를 이미 알고 있다는 가정에서 생각해보자. ① 세금이 인상될 때, 어떤 한 경로에 대해 비용의 상승은 무엇에 의해 결정될까? 이는 해당 경로에 포함된 간선의 개수와 관련된다. 즉, 세금이 k원 인상될 때, 간선을 m..

[Greedy] BOJ 9576 책 나눠주기

문제 링크 : www.acmicpc.net/problem/9576 9576번: 책 나눠주기 백준이는 방 청소를 하면서 필요 없는 전공 서적을 사람들에게 나눠주려고 한다. 나눠줄 책을 모아보니 총 N권이었다. 책이 너무 많기 때문에 백준이는 책을 구분하기 위해 각각 1부터 N까지의 www.acmicpc.net 책을 최대한 많이 나눠주기 위해선 어떻게 해야 할까? 우선 책 번호의 범위가 좁은 사람에게 먼저 책을 나눠주는 것이 유리할 것이다. 범위가 넓은 사람에게 더 많은 선택지가 있기 때문이다. 또한, 동일한 크기의 여러 구간들이 겹쳐 있는 경우에는 최대한 겹치는 구간의 수가 적은 책을 먼저 나눠주어야 더 많은 사람에게 책을 나눠줄 수 있을 것이다. 겹치는 구간을 최대한 피하기 위한 방법은 다음과 같은 두 ..

[2020 Goricon] BOJ 20115 에너지 드링크

문제 링크 : www.acmicpc.net/problem/20115 20115번: 에너지 드링크 페인은 에너지 드링크를 좋아하는 회사원이다. 에너지 드링크는 카페인, 아르기닌, 타우린, 나이아신 등의 성분이 들어있어 피로 회복에 도움을 주는 에너지 보충 음료수이다. 야근을 마치고 한 www.acmicpc.net 그리디 알고리즘으로 해결할 수 있는 문제이다. 최종적으로 만든 드링크의 양이 최대가 되기 위해서는, 두 드링크를 섞을 때 버려지는 양이 최소가 되어야 한다. 그러기 위해서는 두 드링크를 섞을 때, 원래 양이 더 적은 드링크를 절반 버리는 것이 이득이다. 따라서, 드링크의 목록 중 가장 양이 많은 드링크가 기준이 되어, 다른 모든 드링크를 절반씩 섞은 양이 최종 드링크의 최대 양이 된다. [코드] ..

[2020 Goricon] BOJ 20114 미아 노트

문제 링크 : www.acmicpc.net/problem/20114 20114번: 미아 노트 첫째 줄에 원래 문자열의 길이 N, 세로로 번진 글자의 개수 H, 가로로 번진 글자의 개수 W가 주어진다. (1 ≤ N ≤ 100, 1 ≤ H ≤ 10, 1 ≤ W ≤ 10) 둘째 줄부터 H개의 줄에 걸쳐 N × W 길이의 문자열이 www.acmicpc.net 각 문자열이 번진 형태는 위 그림과 같다. 번진 전체 문자열 중 한 문자당 그 문자가 나타나는 구역이 있음을 캐치하고, 그 구역 내에서 문자를 찾을 수 있다면 그 문자를, 찾을 수 없다면 ?을 출력하도록 한다. [코드] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29..

[2020 Goricon] BOJ 20113 긴급 회의

문제 링크 : www.acmicpc.net/problem/20113 20113번: 긴급 회의 투표 결과 1번 플레이어가 1표, 3번 플레이어가 2표, 4번 플레이어가 1표를 받아 3번 플레이어가 퇴출된다. www.acmicpc.net 단순 구현 문제이다. 동일 득표자가 2명 이상일 시 아무도 퇴출되지 않음에 유의하자. [코드] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 #define _CRT_SECURE_NO_WARNINGS #include #include using namespace std; typedef pair p; int n, votes[101]; //0: 무..

[2020 Goricon] BOJ 20112 사토르 마방진

문제 링크 : www.acmicpc.net/problem/20112 20112번: 사토르 마방진 사토르 마방진에 대해 들어본 적이 있는가? 사토르 마방진은 간단히 말하면 "가로로 읽었을 때와 세로로 읽었을 때 똑같이 읽히는 단어 집합"이다. 예시로는 다음과 같은 것들이 있다. 라팔아 팔 www.acmicpc.net 저번달에 진행됐던 고리콘 문제들을 하나씩 풀이해볼 예정이다. 대회 당일에 토익시험이 겹쳐 대회에 참여하지는 못했지만, 기출문제들을 풀어보고자 카테고리를 개설했다. 맨 처음 문제답게 상당히 간단한 문제이다. 마방진의 크기도 최대 100으로 작기 때문에, 단순한 비교로도 충분히 문제를 해결할 수 있다. 마방진의 i행 j열 문자가 j행 i열 문자와 같은지만 확인해주면 된다. [코드] 1 2 3 4 ..

[Greedy] BOJ 1781 컵라면

문제 링크 : www.acmicpc.net/problem/1781 1781번: 컵라면 상욱 조교는 동호에게 N개의 문제를 주고서, 각각의 문제를 풀었을 때 컵라면을 몇 개 줄 것인지 제시 하였다. 하지만 동호의 찌를듯한 자신감에 소심한 상욱 조교는 각각의 문제에 대해 데드라 www.acmicpc.net 그리디 알고리즘으로 해결이 가능한 활동 선택 문제이다. 핵심은 각 문제들을 어떤 기준으로 정렬할 것인지(즉, 어떤 문제의 우선순위를 높게 잡을 것인지)이다. ① 우선 당연히 받을 수 있는 컵라면의 갯수가 많은 문제를 우선적으로 풀어야 할 것이다. 하지만 위와 같은 상황에서, 보상이 8개인 문제를 먼저 풀게 된다면 데드라인이 1인 문제 하나를 풀 수 없게 된다. 보상이 8인 문제는 데드라인이 3이기 때문에 ..

[Greedy] BOJ 1700 멀티탭 스케줄링

문제 링크 : www.acmicpc.net/problem/1700 1700번: 멀티탭 스케줄링 기숙사에서 살고 있는 준규는 한 개의 멀티탭을 이용하고 있다. 준규는 키보드, 헤어드라이기, 핸드폰 충전기, 디지털 카메라 충전기 등 여러 개의 전기용품을 사용하면서 어쩔 수 없이 각종 전 www.acmicpc.net 평소에 전공지식 공부를 병행한 사람이라면 무언가 번뜩할 것이다. 이 문제는 페이지 교체 알고리즘에 빗대어 설명할 수 있기 때문이다. [OS/운영체제] 페이지 교체 (Page Replacement) - (2) FIFO (First-In, First-Out) Page Replacement FIFO는 가장 단순한 페이지 교체 알고리즘으로, 메모리에 옮겨진 메모리들 중 가장 오래된 페이지를 Victim으..

[Greedy] BOJ 1339 단어 수학

문제 링크 : www.acmicpc.net/problem/1339 1339번: 단어 수학 첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대 www.acmicpc.net 이 문제가 그리디 알고리즘으로 해결할 수 있다는 것을 캐치한다면, 일반적으로는 더 자릿수가 큰 수의 앞 자리 알파벳부터 큰 수를 부여하는 식의 접근을 할 것이다. 하지만 이러한 접근의 경우 각종 예외 케이스들을 관통하는 하나의 코드를 구현하기 매우 까다롭다. 예를 들어 ABC와 BB 9개, 총 10개의 단어에 대해 A = 9, B = 8, C = 7 이라면 987 + 88 * 9 = 1,77..

탐욕 알고리즘 (그리디 알고리즘, Greedy Algorithm)

Greedy Algorithm 탐욕 알고리즘(그리디 알고리즘)은 특정 경우들 중 하나를 선택할 때, 그 순간에 가장 최적의 경우를 선택하는 알고리즘이다. 목적지까지 최단 경로로 가야 하는 상황을 예로 들어보자. 목적지를 향해 가던 중, 갈림길을 만났다. 그리디 알고리즘에서는, 다음과 같은 갈림길들 중 현재 상황에서만 최적인 경우를 선택한다. 따라서 위 그림에 그리디 알고리즘을 적용한다면, 직진을 하게 될 것이다. 하지만 만약 직진으로 간 다음 경유지에서 목적지까지의 거리가 100km이고, 다른 두 갈림길의 경유지에서 거리는 10km라면 어떻게 될까? 그리디 알고리즘을 통해 최적의 경우를 선택했지만, 결과적으로는 직진을 선택했기 때문에 목적지까지 최단경로로 갈 수 없게 된다. 이와 같이 그리디 알고리즘은 ..

알고리즘/개념 2020.12.01