목록분류 전체보기 (370)
GitHubSeob

문제 https://www.acmicpc.net/problem/11508 11508번: 2+1 세일 KSG 편의점에서는 과일우유, 드링킹요구르트 등의 유제품을 '2+1 세일'하는 행사를 하고 있습니다. KSG 편의점에서 유제품 3개를 한 번에 산다면 그중에서 가장 싼 것은 무료로 지불하고 나머지 두 www.acmicpc.net 문제풀이 3개씩 묶을 때 가장 싼 유제품이 무료가 된다. 비싼 물품이 무료가 되야 구매 비용이 싸진다. 가장 비싼 물품은 어떻게 묶든 절대로 무료로 살 수 없다. 따라서 내림차순으로 정렬을 하고 3개씩 묶고, 각 3번째 물품은 무료로 사면 된다. 코드 #include #include #include using namespace std; int main() { ios::sync_wi..

문제 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/1758 1758번: 알바생 강호 첫째 줄에 스타박스 앞에 서 있는 사람의 수 N이 주어진다. N은 100,000보다 작거나 같은 자연수이다. 둘째 줄부터 총 N개의 줄에 각 사람이 주려고 하는 팁이 주어진다. 팁은 100,000보다 작거나 같 www.acmicpc.net 문제풀이 팁이 음수가 될 수 는 없다, 음수가 될 경우 팁은 0원이다. 뒤로 갈수록 등수가 늘어나므로 팁은 점점 줄어들것이다. 팁이 0원이 되든 -100원이 되든 똑같은 0원이므로, 팁을 내림차순으로 하여 받으면 최대로 받을 수 있다. 코드 #include #include #include #define ll long long using namespace std; int ma..

문제 https://www.acmicpc.net/problem/13305 13305번: 주유소 표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1 www.acmicpc.net 문제풀이 1번 도시를 지나쳐 2번 도시에 도착했는데 기름의 가격이 더 비쌀 수도 있다. 그런 경우는 다시 1번 도시에서 기름을 채우면 된다. 이런 식으로 문제를 풀면 된다. 변수를 만들어 기름의 최소가격을 도시에 도착할 때마다 갱신하고, 도로의 길이만큼 최소 가격을 곱하면 된다. 코드 #include #include #define MAX 1000000000 #define ll ..

문제 https://www.acmicpc.net/problem/2217 2217번: 로프 N(1 ≤ N ≤ 100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다. 하 www.acmicpc.net 문제풀이 최대 중량이 낮은 로프의 중량 * 로프의 개수가 N개의 로프로 들 수 있는 최대 중량이다. 내림차순으로 정렬하게 되면 반복문을 실행할 때 해당 로프가 항상 최소 중량이므로 추가로 조건을 걸 필요가 없다. 따라서 반복하면서 answer는 answer, 현재 로프 중량 * 로프 개수 둘 중 큰 값으로 저장하면 된다. 코드 #include #include #include usin..

문제 https://www.acmicpc.net/problem/1343 1343번: 폴리오미노 첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -1을 출력한다. www.acmicpc.net 문제풀이 istringstream을 이용해 풀었다. 입력을 받으면 EOF까지 탐색하면서 구분자인 '.'을 기준으로 문자열을 자른다. '.'을 기준으로 나눴을 때 X가 홀수개라면 -1을 바로 출력한다. 그 외에는 X만큼 fill을 이용해 B를 먼저 채우고, 처음부터 4의 배수개까지 A로 채운다. 답에는 '.'도 포함해야 하므로 answer의 크기와 입력받은 input의 크기가 다르면 answer에 '.'을 더했다. 코드 #include #include #include #include #includ..

문제 https://www.acmicpc.net/problem/14916 14916번: 거스름돈 첫째 줄에 거스름돈 액수 n(1 ≤ n ≤ 100,000)이 주어진다. www.acmicpc.net 문제풀이 이 문제는 수학적으로도 풀 수 있지만 DP로도 풀 수 있어서 DP로 풀었다. 1부터 N까지 거스름돈 동전 개수를 나타내기 위한 won 벡터와, 2원, 5원 동전이 들어있는 coin벡터를 선언했다. 거슬러 줄 수 없으면 -1을 출력해야 되기 때문에 벡터를 -1로 초기화했다. DP를 사용할 것이기 때문에 0원의 동전의 개수는 0으로 설정해 준다. 2원 동전부터 시작하여 2의 배수가 되면 2원을 뺀 금액의 동전의 개수+1을 한다. 5원 동전도 마찬가지로 5원부터 5원을 뺀 금액의 동전의 개수+1을 한다. 9..