목록Baekjoon/Gold (80)
GitHubSeob

문제 https://acmicpc.net/problem/2812 2812번: 크게 만들기 N자리 숫자가 주어졌을 때, 여기서 숫자 K개를 지워서 얻을 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오. www.acmicpc.net 문제풀이 우선순위큐로도 풀 수 있는 거 같은데 스택이 코드가 더 간단해 보여서 스택으로 풀었다. 이 문제는 뒤로 가면서 큰 숫자를 발견하면 이전 숫자를 지우기만 하면 된다. 스택을 이용해 숫자를 push 하고, 큰 수가 나온다면, 스택이 비거나 스택의 top과 같을 때까지 pop을 하면 된다. 또는 지운 개수가 K개까지만 반복하면 된다. 입력받은 문자열을 모두 탐색했으면, K개를 안 지운 경우도 있을 수 있으니, while문을 이용해 추가로 지워준다. 스택에는 똑바로 쌓여있지..

문제 https://www.acmicpc.net/problem/1092 1092번: 배 첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 각 크레인의 무게 제한이 주어진다. 이 값은 1,000,000보다 작거나 같다. 셋째 줄에는 박스의 수 M이 주어진다. M은 10,000보 www.acmicpc.net 문제풀이 크레인은 내림차순으로, 박스는 오름차순으로 정렬해서 해당 크레인만 들 수 있는 상자들을 해당 크레인에 배치한다. 그다음 크레인에서는 해당 크레인 + 이전 크레인만이 들 수 있는 개수를 공평하게 배치한다. (이때 첫 번째에 배치한 크레인에 상자가 더 많으면 이 번에 들 수 있는 상자는 모두 두 번째 크레인이 든다) 내림차순으로 정렬했기 때문에, 이전 크레인들의 상자는 ..

문제 https://www.acmicpc.net/problem/11000 11000번: 강의실 배정 첫 번째 줄에 N이 주어진다. (1 ≤ N ≤ 200,000) 이후 N개의 줄에 Si, Ti가 주어진다. (0 ≤ Si < Ti ≤ 109) www.acmicpc.net 문제풀이 우선순위 큐를 이용하면 간단하게 풀 수 있다. 먼저 강의 시간을 입력받는 벡터를 선언하고 우선순위 큐를 선언한다. 우선순위 큐는 먼저 끝나는 강의가 맨 앞에 들어가게끔 오름차순 정렬을 한다. 시간을 모두 입력받았으면, 입장시간 기준으로 오름차순 정렬한다. 반복문을 통해 모든 강의시간표를 확인한다. 우선순위 큐에는 진행중인 강의만 들어가있다. 우선순위 큐가 비어있으면 수업을 강의실을 하나 배정한다. 가장 먼저 끝나는 강의의 시간과 ..

문제 https://www.acmicpc.net/problem/21758 21758번: 꿀 따기 첫 번째 줄에 가능한 최대의 꿀의 양을 출력한다. www.acmicpc.net 문제풀이 벌은 항상 2마리 이고 벌통은 하나이다. 3가지 경우를 나눠 계산했다. *벌은 노란색으로, 벌통은 회색으로 표시 1) 벌이 양옆 끝에 하나씩 있는경우 왼쪽 벌은 2 + 3, 오른쪽 벌은 3 + 4 + 5 의 꿀을 얻는다. 간단하게 식으로 모든 꿀의 합 - (왼쪽 벌꿀 + 오른쪽 벌꿀) + 벌통 꿀 으로 표현할 수 있다. 모든 경우를 탐색해야 하므로 반복문을 통해 꿀통을 1칸부터 끝전칸까지 이동하며 최댓값을 구해준다. 2) 벌통이 맨 오른쪽에 있고, 벌이 나머지칸에 있는 경우 왼쪽 벌은 2 + 4 + 5 + 6, 오른쪽 벌은..

문제 https://www.acmicpc.net/problem/10282 10282번: 해킹 최흉최악의 해커 yum3이 네트워크 시설의 한 컴퓨터를 해킹했다! 이제 서로에 의존하는 컴퓨터들은 점차 하나둘 전염되기 시작한다. 어떤 컴퓨터 a가 다른 컴퓨터 b에 의존한다면, b가 감염되면 www.acmicpc.net 문제풀이 다익스트라 알고리즘으로 풀었다. 처음에 (N+1) * (N+1) 크기의 2차원 벡터로 풀어봤는데 메모리 초과가 떴다. 어느 부분이 문젠가 해서 검색해 보니 N의 최대 크기가 10,000이라 10,001 * 10,001 크기의 벡터를 선언할 수 있어 메모리 초과가 뜬것 같다. 그래서 이 부분을 pair가 섞인 벡터로 풀었더니 메모리 초과가 안 떴다. 세로가 N+1 크기의 가로는 비어있는 ..

문제 https://www.acmicpc.net/problem/2610 2610번: 회의준비 첫째 줄에 회의에 참석하는 사람의 수 N이 주어진다. 참석자들은 1부터 N까지의 자연수로 표현되며 회의에 참석하는 인원은 100 이하이다. 둘째 줄에는 서로 알고 있는 관계의 수 M이 주어진다. 이 www.acmicpc.net 문제풀이 플로이드 와샬 알고리즘으로 문제를 풀었다. 먼저 1부터 사용하기 때문에 N+1 * N+1 크기의 2차원 벡터를 만들고 -1로 초기화한다. 플로이드 와샬 알고리즘을 이용하여 2차원 벡터에 P1가 몇 번 만에 P2를 만날 수 있는지를 저장한다. 그다음 그룹으로 묶고 그룹에서 거쳐가는 횟수의 최댓값이 가장 작은 사람을 구한다. for (mid = 1; mid M; vectorcmte(N..

문제 https://www.acmicpc.net/problem/1613 1613번: 역사 첫째 줄에 첫 줄에 사건의 개수 n(400 이하의 자연수)과 알고 있는 사건의 전후 관계의 개수 k(50,000 이하의 자연수)가 주어진다. 다음 k줄에는 전후 관계를 알고 있는 두 사건의 번호가 주어진다. www.acmicpc.net 문제풀이 플로이드 와샬 알고리즘을 이용해 풀었다. A B가 있을 때 A가 먼저 일어난 사건이면 history[A][B]는 -1이, B가 먼저 일어난 사건이면 history[A][B]는 1이 된다. A B C가 있을 때 A가 B보다 먼저 일어났고 B가 C보다 먼저 일어났으면, 삼단 논법에 의해 A는 C보다 먼저 일어난 사건 이게 된다. 따라서 삼중 반복문을 통해 [A][B] == -1이..

문제 https://www.acmicpc.net/problem/11404 11404번: 플로이드 첫째 줄에 도시의 개수 n이 주어지고 둘째 줄에는 버스의 개수 m이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가 www.acmicpc.net 문제풀이 제목 그대로 플로이드 와샬 문제이다. 도시는 n개가 주어지고 버스는 m개가 주어진다. 주의해야 할 점은 예제를 보면 같은 시작 도시, 같은 도착 도시가 나올 수 있다. (1, 4, 1), (1, 4 ,2) 그래서 값을 입력받을 때마다 최솟값을 벡터에 저장해줘야 한다. 그리고 i에서 i를 포함하여 i에서 j를 갈 수 없는 경우는 그 자리에 0을 출력해줘야 한다. 비용은 100,000 ..

문제 https://www.acmicpc.net/problem/1238 1238번: 파티 첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 10,000), X가 공백으로 구분되어 입력된다. 두 번째 줄부터 M+1번째 줄까지 i번째 도로의 시작점, 끝점, 그리고 이 도로를 지나는데 필요한 소요시간 Ti가 들어 www.acmicpc.net 문제풀 이 다익스트라 알고리즘으로 풀었다. 양방향이 아닌 단방향의 도로의 정보가 주어지므로 조심해야한다. 도로들의 정보를 입력받고, 다익스트라 알고리즘을 통해 최단 거리를 저장한다. ( min_time[town1][town2] = x라면 town1에서 town2로 x의 시간이 걸린다는 의미 ) 반복문을 통해 N마을에서 X마을로 가는 시간, X마을에서 N마을로 가..