목록2024/06 (3)
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/1932 문제풀이 맨 위층부터 시작해서 아래에 있는 수를 선택해가며 내려가고, 합한 값 중 최댓값을 출력하는 문제이다.DP를 이용해서 해당 삼각형을 편하게 2차원 벡터로 나타내면73 88 1 02 7 4 44 5 2 6 5이런식으로 나타낼 수 있다.위에서 아래로 이동하므로 DP[y][x]의 값은 한 칸 위 또는 왼쪽 위 대각선 한 칸 중 큰 값을 더하면 된다.따라서 식으로 나타내면 Arr[y][x] + DP[y-1][x-1], DP[y-1][x]이 된다. 코드#include #include #include using namespace std;int main() { ios::sync_with_stdio(false); cin.tie(NULL)..