목록Baekjoon (177)
GitHubSeob

문제 https://www.acmicpc.net/problem/21314 21314번: 민겸 수 민겸 수 하나가 주어진다. 민겸 수는 대문자 M과 K로만 이루어진 문자열이며, 길이는 3,000을 넘지 않는다. www.acmicpc.net 문제풀이 가장 큰 수는 K가 나올 때까지 기다렸다가 K가 나오면 M과 합치면 된다. K가 나오지 않은 채로 끝나면 남은 M들은 다 1로 바꿔야 가장 큰 수가 된다. 가장 작은 수는 K가 나오면 바로바로 5를 더한다. string largest(string num) { int idx(0), idx2(0), m_cnt(0); string answer(""); for (idx = 0; idx < num.size(); ++idx) { if (num[idx] == 'M') { +..

문제 https://www.acmicpc.net/problem/16953 16953번: A → B 첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다. www.acmicpc.net 문제풀이 이런 문제는 B를 A로 만드는 과정을 탐색하는 게 더 쉬운 것 같다. B를 A로 만드는 과정 중 할 수 있는 것은 두 가지이다. B가 짝수 일 때 2로 나누는 것, B의 일의 자리숫자가 1일 때 1을 없애는 것. 이 이외의 경우는 B를 A로 만들 수 없는 경우이므로 -1을 출력하면 된다. 반복문을 돌려 B가 A가 될 때까지 반복을 한다. B를 10으로 나눈 나머지가 1이면 B를 10으로 나누고, B가 짝수이면 B를 2로 나눈다. B가 A보다 작게되면 만들 수 없으므로 -1을, 위의 두 가지 행동을 할 수 없..

문제 https://www.acmicpc.net/problem/8980 8980번: 택배 입력의 첫 줄은 마을 수 N과 트럭의 용량 C가 빈칸을 사이에 두고 주어진다. N은 2이상 2,000이하 정수이고, C는 1이상 10,000이하 정수이다. 다음 줄에, 보내는 박스 정보의 개수 M이 주어진다. M은 1이 www.acmicpc.net 문제풀이 다 풀고 다른 분들의 풀이를 봤는데 간단하게 풀으셨다... 이런 풀이도 있다 참고만 하시는 걸로... 마을 1부터 마을 N까지 탐색하면서 마을에 도착하면 내릴 수 있는 박스 다 내리고, 박스를 싣는다. 박스를 실을 때는 최대 용량보다 적게 싣는다. 만약 용량을 넘어서면 이전에 실은 박스 중에서 도착 마을이, 이번에 실을 박스의 도착지 보다 먼 마을이 있으면, 박스..

문제 https://acmicpc.net/problem/2812 2812번: 크게 만들기 N자리 숫자가 주어졌을 때, 여기서 숫자 K개를 지워서 얻을 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오. www.acmicpc.net 문제풀이 우선순위큐로도 풀 수 있는 거 같은데 스택이 코드가 더 간단해 보여서 스택으로 풀었다. 이 문제는 뒤로 가면서 큰 숫자를 발견하면 이전 숫자를 지우기만 하면 된다. 스택을 이용해 숫자를 push 하고, 큰 수가 나온다면, 스택이 비거나 스택의 top과 같을 때까지 pop을 하면 된다. 또는 지운 개수가 K개까지만 반복하면 된다. 입력받은 문자열을 모두 탐색했으면, K개를 안 지운 경우도 있을 수 있으니, while문을 이용해 추가로 지워준다. 스택에는 똑바로 쌓여있지..
문제 https://www.acmicpc.net/problem/1541 1541번: 잃어버린 괄호 첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 www.acmicpc.net 문제풀이 괄호의 개수는 주어지지 않고 특별한 조건이 없는 걸로 봐선 무한으로 쓸 수 있다. 값을 최소로 만들려면 뺄셈을 최대한 많이 하는 것이 좋다. 그리고 코드를 줄이기 위해 입력을 받고 마지막에 '+' or '-'를 추가로 더한다. 처음 문자와 마지막 문자는 숫자이므로 첫 숫자는 무조건 덧셈을 해야 한다. '-' 나오는 경우에 뒤에 '+'가 오면 앞의 '-'를 기준으로 묶어 둘 다 ..

문제 https://www.acmicpc.net/problem/20300 20300번: 서강근육맨 PT 첫째 날에 $1$과 $4$를 선택하고, 둘째 날에 $2$와 $3$을 선택하고, 마지막 날에 $5$를 선택하면 $M$은 $5$가 되며, 이때가 $M$이 최소일 때이다. www.acmicpc.net 문제풀이 몇 가지 경우만 생각해서 최댓값을 구하면 되나 싶었는데, 경우가 많은 거 같아서 다 탐색했다. 운동기구가 짝수면 정렬을 하고 맨 앞, 맨뒤 두 개를 선택하고 맨 앞은 그다음 맨 앞, 맨뒤는 그다음 맨뒤를 선택해 가면 된다. 운동기구가 홀수인 경우는 운동기구 하나는 반드시 남게 된다. 정렬을 하여 가장 무거운 운동기구를 하나 남기면 나머지는 짝수개가 된다. 짝수개와 마찬가지로 양쪽 끝 두 개를 선택해 가..

문제 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 문제풀이 우선순위 큐를 이용하면 간단하게 풀 수 있다. 먼저 강의 시간을 입력받는 벡터를 선언하고 우선순위 큐를 선언한다. 우선순위 큐는 먼저 끝나는 강의가 맨 앞에 들어가게끔 오름차순 정렬을 한다. 시간을 모두 입력받았으면, 입장시간 기준으로 오름차순 정렬한다. 반복문을 통해 모든 강의시간표를 확인한다. 우선순위 큐에는 진행중인 강의만 들어가있다. 우선순위 큐가 비어있으면 수업을 강의실을 하나 배정한다. 가장 먼저 끝나는 강의의 시간과 ..