개발/알고리즘 & PS
-
[BOJ] 11508 2+1 세일 - C++개발/알고리즘 & PS 2024. 4. 1. 13:16
https://www.acmicpc.net/problem/11508 11508번: 2+1 세일KSG 편의점에서는 과일우유, 드링킹요구르트 등의 유제품을 '2+1 세일'하는 행사를 하고 있습니다. KSG 편의점에서 유제품 3개를 한 번에 산다면 그중에서 가장 싼 것은 무료로 지불하고 나머지 두www.acmicpc.net아이디어최소한의 값을 지불하려면 무료로 받는 제품의 가격을 최대한 크게 만들어야 한다. 다만, 무료로 받을 수 있는 제품은 3개 중 가장 싼 제품이기에 다른 두 제품이 비쌀수록 큰 할인을 받을 수 있다. 따라서, 내림차순으로 정렬한 후 3개씩 묶어 사면된다. 코드#include #include using namespace std;int main() { cin.tie(nullptr); ..
-
[BOJ] 20153 영웅이는 2의 거듭 제곱을 좋아해! - C++개발/알고리즘 & PS 2024. 3. 29. 23:27
https://www.acmicpc.net/problem/20153 20153번: 영웅이는 2의 거듭 제곱을 좋아해! 영웅이는 2의 거듭 제곱을 좋아해!첫째 줄에 자연수 N (1 ≤ N ≤ 2,222,222)이 주어지고, 둘째 줄에는 N개의 자연수 A (1 ≤ A ≤ 2,222,222)가 주어진다.www.acmicpc.net문제 해석영웅이는 어떤 자연수 $A_n$을 2의 거듭제곱의 합으로 표현한다고 했는데 2진수로 나타내는 것과 같다.$A_n$ 중 최대 한 개의 자연수를 제외할 수 있다. 즉, 하나도 제외하지 않아도 된다.$2^x$가 홀수개면 $2^x$를 결과에 더한다. 즉, 2진수로 표현했을 때 1이 홀수개 존재하는 자리는 1, 짝수개라면 0이 되고 이 값의 최댓값을 찾아야 한다.아이디어$A_n$을 각..
-
[BOJ] 14606 피자 (Small) - C++개발/알고리즘 & PS 2024. 3. 29. 14:08
https://www.acmicpc.net/problem/14606 14606번: 피자 (Small)예제1의 입력이 1이므로, 게임 시작부터 갑이 분리할 수 있는 피자탑이 없습니다. 따라서 갑이 얻는 즐거움은 0입니다. 예제2의 정답 3은 다음과 같은 과정을 통해 얻어집니다. 먼저 놀이를 시작www.acmicpc.net아이디어$n$개의 피자탑을 쪼갰을 때 가장 큰 즐거움을 얻으려면 짝수의 경우 $\frac{n}{2}$개, 홀수의 경우 $\frac{n}{2}$, $\frac{n}{2} + 1$개로 쪼개야 한다. 그리고 쪼개진 피자탑을 다시 쪼개서 $1$개가 될 때까지 얻을 수 있는 즐거움을 모두 더해주면 $n$개의 피자탑을 쪼갰을 때 얻을 수 있는 최대의 즐거움이다. $n$개의 피자탑을 쪼개 얻을 수 있는..
-
[BOJ] 17532 여러분의 다리가 되어 드리겠습니다! - C++개발/알고리즘 & PS 2024. 1. 13. 23:20
https://www.acmicpc.net/problem/17352 17352번: 여러분의 다리가 되어 드리겠습니다!선린월드에는 N개의 섬이 있다. 섬에는 1, 2, ..., N의 번호가 하나씩 붙어 있다. 그 섬들을 N - 1개의 다리가 잇고 있으며, 어떤 두 섬 사이든 다리로 왕복할 수 있다. 어제까지는 그랬다. "왜 다리www.acmicpc.net아이디어n개의 섬이 n-1개의 다리로 모두 이어져 있다가 하나가 끊어졌으므로 2개의 그룹으로 섬을 분류할 수 있다. 각 그룹에서 섬을 하나씩 뽑아 서로 이으면 모든 섬을 다닐 수 있다.여러 섬이 서로 이어져있는지 확인하기 위해 Union-Find를 사용한다. 단계이어진 다리에 대해 Union-Find 수행서로 다른 그룹인 두 섬을 출력하면 되는데 아무 경우..
-
[백준] 16985번 Maaaaaaaaaze C++개발/알고리즘 & PS 2023. 10. 19. 22:21
https://www.acmicpc.net/problem/16985 16985번: Maaaaaaaaaze첫째 줄부터 25줄에 걸쳐 판이 주어진다. 각 판은 5줄에 걸쳐 주어지며 각 줄에는 5개의 숫자가 빈칸을 사이에 두고 주어진다. 0은 참가자가 들어갈 수 없는 칸, 1은 참가자가 들어갈 수 있는 칸을www.acmicpc.net 3차원 BFS에 층별 재배치, 회전까지 들어가 있는 문제이다. 단순하게 모든 경우의 수에 BFS를 해보면 된다. 구현이 살짝 많다.풀이 구상층별 배열 순서를 결정한다.각 층을 회전시킨다.BFS를 수행하고 최단거리를 구한다.permutation → 백트래킹 → BFS 순으로 알고리즘을 사용했다. next_permutation각 층을 배열하는 경우의 수를 모두 구하려면 algorit..
-
[백준] 1062 가르침 C++개발/알고리즘 & PS 2023. 10. 18. 23:19
https://www.acmicpc.net/problem/1062 1062번: 가르침첫째 줄에 단어의 개수 N과 K가 주어진다. N은 50보다 작거나 같은 자연수이고, K는 26보다 작거나 같은 자연수 또는 0이다. 둘째 줄부터 N개의 줄에 남극 언어의 단어가 주어진다. 단어는 영어 소문www.acmicpc.net풀이 구상모든 단어가 anta로 시작하고 tica로 끝나므로 a, n, t, i, c의 5글자는 무조건 배워야 읽을 수 있다. 저 5글자를 모두 배운 후 k - 5개의 글자를 추가로 배워 최대로 읽을 수 있는 단어의 개수를 세면 된다. 백트래킹을 활용하면 구현할 수 있다. k가 5보다 작은지 확인하고 작다면 모든 단어를 읽을 수 없으므로 0을 출력하고 종료한다. 또는, 모든 글자를 배울 수 있는..