목록Baekjoon/Gold (80)
GitHubSeob
문제 https://www.acmicpc.net/problem/1717 문제풀이 숫자 두 개가 속한 집합을 합치거나, 같은 집합인지 확인을 하는 유니온 파인드의 기본 문제이다.집합 중 가장 작은 수를 나타내는 parent 벡터를 이용한다.집합의 가장 작은 수를 찾는 find 함수, 두 집합을 합치는 Union함수, 두 숫자가 같은 집합인지 확인하면 isUnion함수를 선언한다. int find(vector&parent, int num) { if (parent[num] == num) return num; return parent[num] = find(parent, parent[num]);}집합의 가장 작은 수가 num과 같다면 바꿀 필요가 없으므로 그대로 둔다.그렇지 않으면 parent[num]을 가장 ..
문제 https://www.acmicpc.net/problem/10942 문제풀이 팰린드롬이란 역순으로 읽어도 같은 말이 되는 말을 의미한다.앞 뒤를 바꿔서 기존과 같은 수열이면 YES를 출력하면 되는 문제이다. 팰린드롬이 되는 시작 인덱스와 끝 인덱스를 2차원 벡터로 표현하였다.ex) 1부터 3자리까지 팰린드롬이면 vector[1][3]=true, 거짓이면 vector[1][3]=false 시작 인덱스가 팰린드롬의 중간 인덱스로 두고 문제를 풀었다.그리고 팰린드롬 수의 길이를 홀수, 짝수의 경우로 나눴다.홀수인 경우, 시작 지점 앞뒤로 수가 있고 앞뒤 숫자가 같으면 vector[start-idx][start+idx]=true가 된다.idx는 1부터 팰린드롬 수의 끝까지 증가한다, 중간에 팰린드롬 수가..

문제 https://www.acmicpc.net/problem/5052 5052번: 전화번호 목록 첫째 줄에 테스트 케이스의 개수 t가 주어진다. (1 ≤ t ≤ 50) 각 테스트 케이스의 첫째 줄에는 전화번호의 수 n이 주어진다. (1 ≤ n ≤ 10000) 다음 n개의 줄에는 목록에 포함되어 있는 전화번호가 www.acmicpc.net 문제풀이 프로그래머스 문제와 똑같은 문제이다. (https://school.programmers.co.kr/learn/courses/30/lessons/42577) 한 번호가 다른 번호의 접두어인 경우가 있는지를 구하는 문제이다. 긴 번호는 짧은 번호의 접두어가 될 수 없으므로 길이의 오름차순으로 정렬을 한다. 번호를 맨 왼쪽부터 오른쪽으로 가면서 번호를 합친다. 그리..

문제 https://www.acmicpc.net/problem/6156 6156번: Cow Contest N (1 N >> M; vectordist(N + 1, vector(N + 1, INF)); for (int cow = 0; cow > cow1 >> cow2; dist[cow1][cow2] = 1; } for (int mid = 1; mid

문제 https://www.acmicpc.net/problem/3020 3020번: 개똥벌레 개똥벌레 한 마리가 장애물(석순과 종유석)로 가득찬 동굴에 들어갔다. 동굴의 길이는 N미터이고, 높이는 H미터이다. (N은 짝수) 첫 번째 장애물은 항상 석순이고, 그 다음에는 종유석과 석순이 www.acmicpc.net 문제풀이 계속 시도해 보다가 안 돼서 누적합이라는 분류를 보고 풀었다. 석순과 종유석을 구분해서 1부터 N까지 홀수 부분은 홀수 벡터에, 짝수 부분은 짝수 벡터에 따로 저장한다. (인덱스는 길이) 위 그림(예제2)에서는 홀수 벡터는 {1, 1, 4, 1, 0}, 짝수 벡터는 {0, 2, 3, 2, 0}이 된다. 장애물의 높이가 2이면 높이가 1인 위치에서 닿으므로 누적합을 한다. 홀수 벡터는 높..

문제 https://www.acmicpc.net/problem/1245 1245번: 농장 관리 첫째 줄에 정수 N(1 < N ≤ 100), M(1 < M ≤ 70)이 주어진다. 둘째 줄부터 N+1번째 줄까지 각 줄마다 격자의 높이를 의미하는 M개의 정수가 입력된다. 격자의 높이는 500보다 작거나 같은 음이 아닌 정수 www.acmicpc.net 문제풀이 문제를 제대로 안 봐서 조금 헤맸다. 인접한 격자는 상, 하, 좌, 우의 네 방향이 아닌 대각선까지 포함하여 총 여덟 방향이다. 그리고 산봉우리는 하나의 칸일 수도 있고 여러 칸일 수도 있다. 산봉우리 격자들은 모두 같은 높이여야 하고, 그 외의 칸들은 산봉우리의 높이보다 작아야 한다. 우선순위 큐를 이용해 높이 기준으로 내림차순 하게끔 cmp함수를 작..

문제 https://www.acmicpc.net/problem/13422 13422번: 도둑 입력 데이터는 표준 입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫째 줄에 테스트 케이스의 개수를 나타내는 자연수 T가 주어진다. 각각의 테스트 케이스의 첫째 줄에 마 www.acmicpc.net 문제풀이 누적합, 슬라이딩 윈도우 문제이다. 집을 고를 때는 항상 연속된 위치에 있는 집만 고를 수 있다. 붙어있는 m개 만큼의 집을 고르고 돈의 총합을 구해 K보다 작으면 개수를 하나 늘려주면 된다. for (int idx = 0; idx < M; ++idx) sum += money[idx]; if (sum < K) ++answer; for (int idx = 1; idx < N; ++idx) {..

문제 https://www.acmicpc.net/problem/14891 14891번: 톱니바퀴 첫째 줄에 1번 톱니바퀴의 상태, 둘째 줄에 2번 톱니바퀴의 상태, 셋째 줄에 3번 톱니바퀴의 상태, 넷째 줄에 4번 톱니바퀴의 상태가 주어진다. 상태는 8개의 정수로 이루어져 있고, 12시방향부터 www.acmicpc.net 문제풀이 톱니바퀴가 회전할 때는 처음 입력받은 톱니바퀴는 반드시 회전한다. 그다음 인접한 톱니바퀴는 회전하고 난 후가 아닌 회전하기 전의 기준 톱니바퀴와의 조건을 따져야 한다. prev_gear와 gear를 따로 두어 조건을 따지는 톱니바퀴는 prev_gear를 이용하고, 회전을 할 때는 gear의 톱니바퀴를 회전하였다. 왼쪽 톱니바퀴의 [2]와 오른쪽 톱니바퀴의 [6]의 극을 따져야 ..

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