본문 바로가기

전체 글137

merge sort - 병합 정렬 정리 이번에 알고리즘 공부를 하며 알게 된 merge sort에 대해서 정리를 해보겠습니다. 이 sort를 이해하기 위해서는 기본적으로 재귀함수에 대해서 알고 계셔야합니다. 재귀함수란 함수 자신이 자신을 다시 부르는 함수를 의미합니다. 그리고 재귀함수 내에서 정해진 return에 알맞은 조건을 만족하게 되면 return을 하여 값을 도출하는 형태입니다. 글로만 설명하니 너무 어려운것 같아서 재귀함수부터 간단히 그림으로 설명드리겠습니다. 이처럼 자신의 복사본을 불러서 계산을 하고 return되는 조건에 알맞으면 return이 되는 형식을 재귀함수라고 부른다. 검은 글자가 자신의 복사본을 늘려가는 과정이고 붉은 글씨가 int값이 정해져서 return되고 있는 상황입니다. 처음으로 이렇게 그림을 그려서 설명을 해봤.. 2021. 2. 7.
백준 10163번 C/C++ 문제에서 딱 봐도 2차원 배열을 사용하라는 듯이 나왔다 그래서 간단하게 풀 수 있었습니다. #include int main() { int n; int a, b, x, y; int count; int nemo[101][101]; scanf_s("%d", &n); for (int i = 1; i 2020. 9. 6.
백준 9095번 C/C++ 이전의 문제인 2xn과 비슷한 형식의 dp문제라서 그런지 시간이 별로 걸리지 않았다. 시간 초과가 나올거 같아서 동일하게 배열을 활용하여 풀기로 하였고 이 문제 또한 규칙성을 빠르게 알아차렸다. 예를 들어 8의 예시를 들자면 7, 6, 5의 경우의 수를 더하면 8이 나왔다. 4까지는 숫자가 문제에 나와있어서 5까지만 구해봐도 그 규칙성이 눈에 띄게 보였다. 코드는 이렇게 만들었다. #include int main() { int a[1001]; a[1] = 1; a[2] = 2; a[3] = 4; int result[1001]; int testcase; scanf("%d", &testcase); for (int j = 0; j < testcase; j++) { int n; scanf("%d", &n); f.. 2020. 8. 24.
백준 11726번 C/C++ 2xn 타일링을 풀어보았다. 몇개의 예시를 바탕으로 경우의 수를 세어 보았고 '피보나치 함수' 즉, 앞선 a의 경우를 구하기 위해 a-1의 경우와 a-2의 경우를 더하면 되는 것이었다. 그래서 코드를 #include int main() { int a; int count; scanf_s("%d", &a); count = algori(a); count = count / 10007; printf("%d", count); system("pause"); } int algori(int a) { if (a == 1) return 1; else if (a == 0) return 1; else { return algori(a - 1) + algori(a - 2); } } 위와 같이 만들어서 제출을 하니 system과 s.. 2020. 8. 24.