본문 바로가기

반응형
SMALL

알고리즘

4317. 항구에 들어오는 배 - D3 https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWMedCxalW8DFAXd# SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 최근들어 왜 이렇게 문제 이해를 잘 못하는지 모르겠습니다. 이 문제가 바로 그 문제입니다. 문제를 잘 못 이해하고 다른 방식으로 풀다가 오답 몇 번 맞고, 알아보니 제가 잘 못 이해한 걸 알게 되었습니다. 문제를 어렵게 보는 것도 능력인거 같습니다. 쓸데없는 이 문제는 결국 1에서 시작하는 주기가 몇 개 있는 지를 파악하는 문제입니다. 저는 이 주기를 안 보고 즐거운 날의 간격만 신경쓰면서 문제를.. 더보기
C언어 순열과 조합 최근 문제를 풀다가 계속해서 순열과 조합 문제를 보게 되었는데, 제가 재귀가 약하다보니 항상 문제를 푸는데 어려움이 있었습니다. 그래서 이번에 정리를 잘해서 다시는 찾아보는 일이 없도록 만들고자 포스팅을 하려 합니다. 우선, 순열입니다. #include int arr[4] = { 1, 2, 3, 4 }; int len = 4; void swap(int a, int b) { int temp = arr[a]; arr[a] = arr[b]; arr[b] = temp; } void permu(int N) { if (N == 3) { for (int i = 0; i < 4; i++) { printf("%d", arr[i]); } printf("\n"); } else { for (int i = N; i < 4; i.. 더보기
2817. 부분 수열의 합 - D3 https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV7IzvG6EksDFAXB 불러오는 중입니다... 이 문제는 조합과 백트래킹을 필요로 하는 문제입니다. 그럼 바로 보도록 하겠습니다. N개의 숫자를 조합해서 K의 수를 표현할 수 있는 가지수를 나타내는 문제입니다. 그렇다면 당연히 조합이 필요하겠죠? 또한, N이 20을 넘어가기 때문에 1 ~ 20개의 숫자를 조합으로 구하려고 하는 것은 대단히 오래걸리기에 백트래킹을 사용해야합니다. 지금까지 더한 합이 K를 넘기면 안된다는 조건으로요. #include #include void combi(int* arr, int st, int cnt, int temp, int dept.. 더보기
2806. N-Queen - D3 https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV7GKs06AU0DFAXB&categoryId=AV7GKs06AU0DFAXB&categoryType=CODE SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com N Queen은 정말 유명한 문제죠. 이 문제를 제가 한 4번 정도 풀어 본거 같은데, 풀 때마다 항상 헷갈리더라고요. 그래서 따로 정리를 해보고자 들고왔습니다. 모두가 잘 아시다시피 Queen의 경우 대각선과 같은 행, 열을 공격 가능합니다. N Queen 문제의 경우 이 공격 라인을 피해서 N개의 Queen을 놓을.. 더보기
7510. 상원이의 연속 합 - D3 https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWoEzJFa2A4DFARq SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 최근 SW Expert Academy의 문제를 난이도 순으로 전부 다 풀어보고 있는 중입니다. 현재까지는 난이도 낮은 문제들만 풀어서 따로 리뷰를 적을 일이 없을 줄 알았는데, 이 문제는 한 번 다루어보고 넘어가는 것이 좋은거 같아서 들고 왔습니다. 이 문제는 연속된 자연수의 합으로 원하는 값을 찾고 그 갯수가 몇 개인지를 파악하는 문제입니다. 솔직히 N의 범위가 10^6이라는 낮지 않은 범위였지만.. 더보기
scanf의 맹점 / 입력 버퍼 C언어로 문제를 풀다가 아래와 같은 입력 값을 받았습니다. 1 3 A 10 B 7 C 5 그래서 저는 A와 10을 따로 변수에 담기 위해서 아래와 같은 코드를 이용했습니다. #include int main(void) { int num; char word; int T; int N; scanf("%d", &T); for (int t = 1; t 더보기
1717 - 집합의 표현 https://www.acmicpc.net/problem/1717 1717번: 집합의 표현 첫째 줄에 n(1≤n≤1,000,000), m(1≤m≤100,000)이 주어진다. m은 입력으로 주어지는 연산의 개수이다. 다음 m개의 줄에는 각각의 연산이 주어진다. 합집합은 0 a b의 형태로 입력이 주어진다. 이는 a가 포함되어 있는 집합과, b가 포함되어 있는 집합을 합친다는 의미이다. 두 원소가 같은 집합에 포함되어 있는지를 확인하는 연산은 1 a b의 형태로 입력이 주어진다. 이는 a와 b가 같은 집합에 포함되어 있는지를 확인하는 연산이다. a www.acmicpc.net 이 전에 풀었던 1976 - 여행 가자 문제와 유사한 문제입니다. 단, 이 문제는 중간 중간마다 결과를 출력해야 한다는 점만 분기를 .. 더보기
1976 - 여행 가자 MST (Minimum Spanning Tree, 최소신장트리)를 하려면 크루스칼 알고리즘이 필요합니다. 근데 크루스칼 알고리즘을 사용하기 위해선 Union Find라는 알고리즘이 또 필요합니다. 그렇다면 차근차근 Union Find부터 알아봅시다. Union Find란 서로가 속한 집합이 같은 집합인지 파악하는 것입니다. 즉, 학교 내의 학생 2명이 같은 반인지를 확인하는 알고리즘이라 생각하면 됩니다. Union Find를 구현하기 위해 배열과 Tree를 사용할 수 있지만, 본 글에서는 배열로 다루는 Union Find를 설명할 것입니다. Union Find를 구하기 위해선 총 3개의 행위(메소드)가 필요합니다. 우선 배열을 초기화하는 init과 각자의 Root를 구하기 위한 find, 서로 같은 Ro.. 더보기

반응형
LIST