목록Baekjoon (177)
GitHubSeob

문제 https://www.acmicpc.net/problem/14500 14500번: 테트로미노 폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변 www.acmicpc.net 문제풀이 문제를 대충 봤을 때는 블록을 이리저리 회전하고, 대칭시켜서 모든 칸을 확인해야 되나 싶었다. 문제를 자세히 보니 5가지 블록은 모두 4칸으로 되어있고, 5가지를 제외하고 4칸으로 표현할 수 있는 블록이 더 있을까 생각을 해봤는데 당장 떠오르는 모양이 없었다. 그래서 모든 칸에서 DFS를 돌려 모든 경우를 탐색해 보면 되겠다 싶었다. DFS함수는 인자로 y, x, 그리고 현재 탐색한..

문제 https://www.acmicpc.net/problem/13905 13905번: 세부 첫 번째 줄에는 섬에 존재하는 집의 수 N(2≤N≤100,000)와 다리의 수 M(1≤M≤300,000)이 주어진다. 두 번째 줄에는 숭이의 출발 위치(s)와 혜빈이의 위치(e)가 주어진다. (1≤s, e≤N, s≠e). 다음 M개의 줄 www.acmicpc.net 문제풀이 크루스칼 알고리즘으로 풀었다. 구조체를 선언하여 섬 1, 섬 2, 무게 제한을 변수로 둔다. 부모를 찾는 find, 두 노드 같은 사이클로 만드는 Union, 두 노드가 같은 사이클인지를 판별하는 isUnion 함수를 구현한다. 모든 입력을 다 받았으면, 정렬을 해야 한다. 가장 작은 길이로 시작점과 도착점을 연결하는 것이 아닌, 최대 개수를..

문제 https://www.acmicpc.net/problem/1946 1946번: 신입 사원 첫째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스의 첫째 줄에 지원자의 숫자 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 각각의 지원자의 서류심사 성 www.acmicpc.net 문제풀이 지원자 A가 합격하려면 나머지 모든 지원자의 성적과 비교했을 때, A의 서류성적 B의 서류 등수, A의 면접 등수 > B의 면접 등수만 아니면 된다. 처음에는 이중 반복문을 이용해서 풀었는데 시간초과가 나서 투 포인터 느낌으로 풀었다. 먼저 가장 ..
문제 https://www.acmicpc.net/problem/18917 18917번: 수열과 쿼리 38 3번째 쿼리가 끝난 이후 배열의 상태는 [0, 3, 1, 4]이다. 6번째 쿼리가 끝난 이후 배열의 상태는 [0, 3, 1, 4, 1]이다. 10번째 쿼리가 끝난 이후 배열의 상태는 [0, 3, 1]이다. www.acmicpc.net 문제풀이 문제에는 4가지 쿼리가 있다. 1은 추가, 2는 제거, 3, 4는 값을 출력하는 쿼리이다. 문제를 보면 배열의 몇 번째 값을 출력하거나 값이 어디에 있는지 등등 배열이 필요한 경우가 없다. 따라서 값을 더해주는 sum과 xor연산을 하는 XOR의 값만 구하면 된다. 쿼리 1은 sum에 x를 더하면 된다. XOR에 x를 xor연산하면 된다. 쿼리 2는 sum에서 ..

문제 https://www.acmicpc.net/problem/27165 27165번: 모든 곳을 안전하게 《백개먼》은 주사위 두 개를 던져서 나온 눈의 수만큼 말을 선택하여 정해진 방향으로 이동시키는 게임입니다. 말을 이동할 수 있다면 반드시 이동해야 하며, 두 주사위의 눈이 같다면 각 주사 www.acmicpc.net 문제풀이 0부터 N번까지의 N+1개의 칸이 있다. 0부터 N번까지의 칸에는 말들이 놓여있거나 놓여있지 않다. 말들이 모든 칸에 2개 이상 or 0개가 있을 경우 안전한 상태라 한다. 주어진 입력에서 안전한 상태가 될 수 있는지, 안전한 상태라면 어느 칸의 말을 옮겨야 하는지 출력하는 문제이다. 경우의 수를 나누어 문제를 풀었다. 입력을 받을 때 말의 칸이 1인 경우 1의 개수를 나타내는..

문제 https://www.acmicpc.net/problem/2637 2637번: 장난감 조립 첫째 줄에는 자연수 N(3 ≤ N ≤ 100)이 주어지는데, 1부터 N-1까지는 기본 부품이나 중간 부품의 번호를 나타내고, N은 완제품의 번호를 나타낸다. 그리고 그 다음 줄에는 자연수 M(3 ≤ M ≤ 100)이 주 www.acmicpc.net 문제풀이 다른 사람들의 풀이보다 벡터를 더 선언한 것 같다.. 입력값들을 저장하는 input, Y 부품을 만들기 위해 필요한 X의 개수를 저장하는 ingr 벡터, ingr[Y][X]=K; 기본 부품인지 나타내는 bool형 벡터 isBase, 들어오는 간선의 개수를 알려주는 indegree 벡터를 선언했다. for (int idx = 0; idx < M; ++idx)..

문제 https://www.acmicpc.net/problem/20924 20924번: 트리의 기둥과 가지 첫 번째 줄에는 노드의 개수 $N$($1 \le N \le 200\,000$)과 루트 노드의 번호 $R$($1 \le R \le N$)이 주어진다. 이후 $N-1$개의 줄에 세 개의 정수 $a$, $b$, $d$($1 \le a, b \le N$, $ a \ne b$)가 주어진다. 이는 $a$번 www.acmicpc.net 문제풀이 입력되는 여러 가지 형태의 나무이다. 나무는 가지 없이 기둥만 있을 수 있다. 나무의 가지가 여러 개 있을 경우 가장 긴 가지의 길이만 필요하다. 입력되는 노드 두 개는 누가 부모인지 모른다. 따라서 node1의 트리와 node2의 트리의 각각 node를 추가해야 한다...

문제 https://www.acmicpc.net/problem/9489 9489번: 사촌 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 노드의 수 n과 사촌의 수를 구해야 하는 노드의 번호 k가 주어진다. (1 ≤ n ≤ 1,000, 1 ≤ k ≤ 1,000,000) 다음 줄 www.acmicpc.net 문제풀이 주어진 조건을 통해 트리를 구성하고 노드의 번호 K의 부모노드, 조상 노드(부모의 부모)를 구해 K의 형제 노드를 제외한 손자 노드를 구하면 된다. 숫자는 연속으로 주어지지 않으므로 (쓰지 않는 숫자가 있음) map을 이용하여 트리를 구성했다. unordered_maptree; unordered_mapparent_map; 총 두 개의 map을 구성했다. tre..

문제 https://www.acmicpc.net/problem/1766 1766번: 문제집 첫째 줄에 문제의 수 N(1 ≤ N ≤ 32,000)과 먼저 푸는 것이 좋은 문제에 대한 정보의 개수 M(1 ≤ M ≤ 100,000)이 주어진다. 둘째 줄부터 M개의 줄에 걸쳐 두 정수의 순서쌍 A,B가 빈칸을 사이에 두고 주 www.acmicpc.net 문제풀이 위상정렬 + 우선순위 큐 문제이다. 먼저 풀어야 되는 문제가 있으면 먼저 풀어야 한다. 현재 풀 수 있는 문제가 여러 개라면 번호가 낮은 문제 먼저 풀어야 한다. 위상정렬에서 queue를 쓰는 대신 priority_queue를 사용하면 문제를 쉽게 해결할 수 있다. 코드 #include using namespace std; priority_queuepq..