본문 바로가기

분류 전체보기234

[알고리즘 7.1.1] 재귀함수 - 팩토리얼 문제 N 팩토리얼 (N!)은 1부터 N까지의 곱으로 정의된다. 예를 들어 3! = 1 x 2 x 3 = 6 4! = 1 x 2 x 3 x 4 = 24 이다. N이 주어질 때, N!을 계산하는 프로그램을 작성하시오. 입력 첫 번째 줄에 숫자 N이 주어진다. ( 1 ≤ N ≤ 10 ) 출력 첫째 줄에 N!을 출력한다. 예제 입력 4 예제 출력 24 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include int fac(int a){ if(a==0) return 1; else return a*fac(a-1); } int main() { int n; scanf("%d",&n); printf("%d",fac(n)); return 0; } 2019. 4. 25.
[알고리즘 10.2.4] 매개 변수 탐색 - 중복 없는 구간 문제 n개의 숫자가 주어지고, 이 중에서 r개의 연속된 숫자를 선택했을 때, 이 연속 부분 내에는 숫자가 중복되지 않기를 원한다. 예를 들어, 다음과 같이 10개의 숫자에서 3개의 연속된 숫자를 선택할 수 있다. 이렇게 선택을 하면, 선택된 숫자들 사이에서는 중복이 존재하지 않는다. r의 최댓값을 구하는 프로그램을 작성하시오. 위의 경우, (4, 2, 1, 3)을 선택하면 되므로 r의 최댓값은 4이다. r이 5 이상이 될 경우, 중복 없이 연속 부분을 선택하는 것이 불가능하다. 입력 첫째 줄에는 숫자의 개수 n이 주어진다. ( 1 ≤ n ≤ 100,000 ) 둘째 줄에 n개의 숫자가 주어진다. 각 숫자는 항상 1보다 크거나 같고, n보다 작거나 같다. 출력 r의 최댓값을 출력한다. 예제 입력 10 1 3.. 2019. 4. 25.
[알고리즘 10.2.3] 매개 변수 탐색 - NN단표 문제 알랩이는 구구단표처럼 NN단표를 만들었다고 한다. NN단표는 2차원 배열의 모양으로 곱셈 1단부터 N단까지의 값들을 적어놓은 형태이다. NN단표의 배열을 A라고 했을 때, 배열의 들어가는 수 A[i][j]=i*j이다.(즉, 4행 7열에는 28, 7행 5열에는 35가 들어가 있다.) 알랩이는 N단까지 나온 숫자들 중에서 K번째로 작은 수를 찾고 싶어한다. 이때, 중복되는 여러 수들을 고려한다. 즉 N*N개의 모든 수들 중에서 K번째 수를 구하는 것이다. 입력 첫째 줄에 배열의 크기 N이 주어진다. N은 100,000보다 작거나 같은 자연수이다. 둘째 줄에 K가 주어진다. K는 N*N보다 작거나 같은 자연수이다. 출력 K번째 원소를 출력한다. 예제 입력 3 7 예제 출력 6 1 2 3 4 5 6 7 8.. 2019. 4. 25.
[알고리즘 10.2.2] 매개 변수 탐색 - 나무 자르기 문제 얼마전에 큰맘 먹고 새로운 절단기를 구입한 목수 윤성이는 나무 M미터가 필요하다. 절단기는 다음과 같이 동작한다. 먼저, 윤성이는 절단기에 높이 H를 지정해야 한다. 높이를 지정하면 톱날이 땅으로부터 H미터 위로 올라간다. 그 다음, 한 줄에 연속해있는 나무를 모두 절단해버린다. 따라서, 높이가 H보다 큰 나무는 H 위의 부분이 잘릴 것이고, 낮은 나무는 잘리지 않을 것이다. 예를 들어, 한 줄에 연속해있는 나무의 높이가 20, 15, 10, 17이라고 하자. 상근이가 높이를 15로 지정했다면, 나무를 자른 뒤의 높이는 15, 15, 10, 15가 될 것이고, 윤성이는 길이가 5인 나무와 2인 나무를 들고 집에 갈 것이다. (총 7미터를 집에 들고 간다) 목수 윤성이는 과유불급을 좌우명으로 삼고 있.. 2019. 4. 25.
[알고리즘 10.2.1] 매개 변수 탐색 - 2차식 정답 추측 (*이진탐색 외 방법) 문제 2차식 f(x) = x*x+ x 가 있고, 숫자 a가 주어진다. 우리는 f(x) = a 를 만족하는 x의 값을 찾고 싶지만, 보통 이 값은 정수로 떨어지지 않는 경우가 많다. 예를 들어, f(x) = 20 을 풀고자 한다면, x = 4이기 때문에 이는 정수이지만, f(x) = 103 을 풀고자 한다면 이는 x = 9.6612... 로써 정수가 아니다. 이 문제에서는 x의 정수부분이 얼마인지를 구하는 프로그램을 작성하시오. 예를 들어, f(x) = 103 을 풀고자 한다면, x = 9.6612... 이기 때문에 정수부분은 9가 된다. 입력 첫 번째 줄에 숫자 a가 주어진다. ( 1 ≤ a ≤ 1,000,000,000,000,000,000 ) 출력 f(x) = a 를 만족하는 x의 정수부분을 출력한다... 2019. 4. 25.
[알고리즘 10.1.4] 이진탐색 - 두 용액 문제 KOI 부설 과학연구소에서는 많은 종류의 산성 용액과 알칼리성 용액을 보유하고 있다. 각 용액에는 그 용액의 특성을 나타내는 하나의 정수가 주어져있다. 산성 용액의 특성값은 1부터 1,000,000,000까지의 양의 정수로 나타내고, 알칼리성 용액의 특성값은 -1부터 -1,000,000,000까지의 음의 정수로 나타낸다. 같은 양의 두 용액을 혼합한 용액의 특성값은 혼합에 사용된 각 용액의 특성값의 합으로 정의한다. 이 연구소에서는 같은 양의 두 용액을 혼합하여 특성값이 0에 가장 가까운 용액을 만들려고 한다. 예를 들어, 주어진 용액들의 특성값이 [-2, 4, -99, -1, 98]인 경우에는 특성값이 -99인 용액과 특성값이 98인 용액을 혼합하면 특성값이 -1인 용액을 만들 수 있고, 이 용액.. 2019. 4. 25.
[알고리즘 10.1.3] 이진탐색 - 숫자 개수 세기 문제 n개의 숫자가 주어지고, q개의 질문이 주어진다. 각각의 질문은 n개의 숫자 중에서 특정 숫자가 몇개나 있는지를 묻는다. q개의 질문에 모두 답하는 프로그램을 작성하시오. 입력 첫 번째 줄에 숫자의 개수 n, 그리고 질문의 개수 q가 주어진다 ( 1 ≤ n ≤ 100,000, 1 ≤ q ≤ 100,000) 두 번째 줄에 n개의 숫자가 주어진다. 세 번째 줄에 q개의 질문이 주어진다. 주어지는 q개의 질문에 해당하는 숫자 범위는 100,000,000이하이다. 출력 각 질문에 대하여 숫자의 개수를 한 줄에 하나씩 출력한다. 예제 입력 10 4 1 3 4 3 2 3 1 2 5 10 1 3 9 10 예제 출력 2 3 0 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 1.. 2019. 4. 25.
[알고리즘 10.1.2] 이진탐색 - 숫자박스 문제 숫자박스에는 자연수들이 적혀있는 종이들이 N장 들어있다. 숫자 M개가 주어졌을 때, 이 숫자가 적혀있는 숫자가 상자 안에 있는지 아닌지를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 윤성이가 가지고 있는 숫자 정보의 개수 N (1 ≤ N ≤ 300,000)이가 주어진다. 둘째 줄에는 숫자 정보들이 주어진다. 숫자는 1,000,000이하의 정수이다. 두 숫자 카드에 같은 숫자가 적혀있는 경우는 없다. 셋째 줄에는 M (1 ≤ M ≤ 500,000)이 주어진다. 넷째 줄에는 윤성이가 숫자 박스에 있는지 아닌지를 구해야 할 M개의 숫자가 주어지며, 이 숫자는 공백으로 구분되어져 있다. 이숫자도 1,000,000이하의 정수이다. 출력 첫째 줄에 입력으로 주어진 M개의 숫자에 대해서, 각 숫자가 숫자 상자.. 2019. 4. 25.
[알고리즘 10.1.1] 고급정렬 - 이진탐색 문제 n개의 오름차순으로 정렬된 숫자가 주어지고, 그 후 q개의 질문이 주어진다. 각각의 질문은 특정 숫자가 n개의 숫자 내에 존재하는지를 판별하는 것이다. 모든 q개의 질문에 대하여 답을 하는 프로그램을 작성하시오. 입력 첫 번째 줄에 숫자의 개수 n, 그리고 질문의 개수 q가 주어진다 ( 1 ≤ n ≤ 100,000, 1 ≤ q ≤ 100,000) 이는 오름차순으로 정렬되어 주어진다. 두 번째 줄에 n개의 숫자가 주어진다. 세 번째 줄에 q개의 질문이 주어진다. 각 수는 21억보다 작은 정수다. 출력 각 질문에 대하여 숫자가 존재하면 YES, 아니면 NO를 한 줄에 하나씩 출력한다. 예제 입력 10 4 1 2 4 8 10 11 12 14 15 19 4 5 8 17 예제 출력 YES NO YES NO .. 2019. 4. 25.
[알고리즘 9.3.1] 고급정렬 - 퀵정렬 구현 문제 N개의 자연수가 주어질 때, 퀵정렬을 이용하여 이를 정렬하는 프로그램을 작성하시오. 입력 첫 번째 줄에 N이 주어진다. ( 1 ≤ N ≤ 100,000 ) 두 번째 줄에 N개의 자연수가 주어진다. 출력 퀵정렬을 이용하여 숫자를 오름차순으로 정렬한 결과를 출력한다. 예제 입력 10 5 9 2 8 3 7 4 6 1 10 예제 출력 1 2 3 4 5 6 7 8 9 10 예제 입력 5 2 3 1 2 1 예제 출력 1 1 2 2 3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 .. 2019. 4. 25.
[알고리즘 9.2.1] 고급정렬 - 합병정렬 구현 문제 서로 다른 n개의 정수가 주어질 때, 이를 합병정렬을 이용하여 오름차순으로 정렬하는 프로그램을 작성하시오. 입력 첫 번째 줄에 n이 주어진다. ( 1 ≤ n ≤ 100,000 ) 두번째 줄에 n개의 정수가 주어진다. 출력 첫 번째 줄에 n개의 숫자를 합병정렬을 이용하여 오름차순으로 정렬한 결과를 출력한다. 예제 입력 10 2 5 3 4 8 7 -1 9 10 2 예제 출력 -1 2 2 3 4 5 7 8 9 10 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58.. 2019. 4. 25.
[알고리즘 15.1.2] 분할정복법 - 합병정렬구현하기 문제 서로 다른 n개의 정수가 주어질 때, 이를 합병정렬을 이용하여 오름차순으로 정렬하는 프로그램을 작성하시오. 입력 첫 번째 줄에 n이 주어진다. ( 1 ≤ n ≤ 100,000 ) 두번째 줄에 n개의 정수가 주어진다. 출력 첫 번째 줄에 n개의 숫자를 합병정렬을 이용하여 오름차순으로 정렬한 결과를 출력한다. 예제 입력 10 2 5 3 4 8 7 -1 9 10 2 예제 출력 -1 2 2 3 4 5 7 8 9 10 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58.. 2019. 4. 24.
[알고리즘 15.1.1] 분할정복법 - 연속부분최대합 문제 N개의 정수가 주어질 때, 연속된 부분을 선택하여 합을 최대화 하는 프로그램을 작성하시오. 예를 들어, 아래와 같이 8개의 숫자가 있을 경우, 색칠된 부분을 선택했을 때 그 합이 가장 최대가 된다. 입력 첫 번째 줄에 n이 주어진다. ( 1 ≤ n ≤ 100,000 ) 두 번째 줄에 n개의 정수가 주어진다. 출력 연속된 부분을 선택하였을 때의 최댓값을 출력한다. 예제 입력 8 2 3 -5 8 -3 4 2 -9 예제 출력 11 예제 입력 5 -1 -2 3 -2 4 예제 출력 5 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 #include using namespace st.. 2019. 4. 24.
[알고리즘 14.1.2] 고급재귀함수 - goodseq 문제 숫자 1, 2, 3으로만 이루어지는 수열이 있다. 임의의 길이의 인접한 두 개의 부분 수열이 동일한 것 이 있으면, 그 수열을 나쁜 수열이라고 부른다. 그렇지 않은 수열은 좋은 수열이다. 다음은 나쁜 수열의 예이다. 33 32121323 123123213 다음은 좋은 수열의 예이다. 2 32 32123 1232123 길이가 N인 좋은 수열들을 N자리의 정수로 보아 그중 가장 작은 수를 나타내는 수열을 구하는 프로그램 을 작성하라. 예를 들면, 1213121과 2123212는 모두 좋은 수열이지만 그 중에서 작은 수를 나타내는 수 열 1213121이다. 입력 입력은 숫자 N하나로 이루어진다. N은 1 이상 80 이하이다. 출력 첫 번째 줄에 1, 2, 3으로만 이루어져 있는 길이가 N인 좋은 수열들 .. 2019. 4. 24.
[알고리즘 14.1.1] 고급재귀함수 - 거듭제곱구하기L 문제 n과 m이 주어질 때, n의 m승을 구하는 프로그램을 작성하시오. 단, n의 m승의 값이 커질 수 있기 때문에, 정답을 10,007 으로 나눈 나머지를 출력한다. 입력 첫 번째 줄에 숫자 n과 m이 주어진다. ( 1 ≤ n ≤ 100, 1 ≤ m ≤ 1,000,000,000,000,000,000 ) 출력 첫째 줄에 n의 m승을 10,007 으로 나눈 나머지를 출력한다. 예제 입력 3 4 예제 출력 81 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 #include using namespace std; long long int n, m; long long int power(long long int p){ if.. 2019. 4. 24.