목록Baekjoon (177)
GitHubSeob

문제 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..

문제 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이..