JUNGOL
-
JUNGOL 실력키우기 1161 : 하노이탑보관함 2018. 11. 15. 14:08
하노이의 탑에 대한 전설은 아래와 같다. 고대 인도의 베나레스(현재 베트남의 하노이)에 있는 한 사원에는 세상의 중심을 나타내는 큰 돔이 있고 그 안에 세 개의 다이아몬드 기둥이 동판 위에 세워져 있다. 기둥 가운데 하나에는 신이 64개의 순금 원판을 끼워 놓았다. 가장 큰 원판이 바닥에 놓여 있고, 나머지 원판들이 점점 작아지며 꼭대기까지 쌓여 있다. 이것은 신성한 브라흐마의 탑이다. 브라흐마의 지시에 따라 승려들은 모든 원판을 다른 기둥으로 옮기기 위해 밤낮 없이 차례로 제단에 올라 규칙에 따라 원판을 하나씩 옮긴다. 이 일이 끝날 때, 탑은 무너지고 세상은 종말을 맞이하게 된다. 기둥을 1, 2, 3 번으로 하고, N개의 원판이 작은 것부터 1, 2, 3, 4 … N이라고 할 때, 아래의 규칙에 ..
-
JUNGOL 실력키우기 1309 : 팩토리얼보관함 2018. 11. 15. 13:28
1부터 어떤 양의 정수 n까지의 정수를 모두 곱한 것을 말하며 n!로 나타낸다.0! = 1 1! = 1 2! = 2 n! = n * (n-1)! : 와 같이 정의된다.예로 4! = 4×3×2×1 = 24 이다.n! 이 주어졌을 때 결과를 출력하는 프로그램을 작성하라. * 결과가 int범위를 넘는 경우 VC/VC++는 변수 선언 __int64 입력/출력 서식문자 %I64d GCC/G++는 변수 선언 long long 입력/출력 서식문자 %lld 를 사용한다. 입력은 한 줄로 이뤄지며 팩토리얼의 숫자 n(1≤n≤15)이 입력된다. n!에 대한 계산 결과를 "출력예"처럼 과정을 출력하고 마지막에 결과를 출력한다. 44! = 4 * 3! 3! = 3 * 2! 2! = 2 * 1! 1! = 1 24 드디어 재귀함..
-
JUNGOL 실력키우기 2858 : 쇠막대기보관함 2018. 11. 12. 10:14
여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고,레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저의 배치는 다음 조건을 만족한다. - 쇠막대기는 자신보다 긴 쇠막대기 위에만 놓일 수 있다. - 쇠막대기를 다른 쇠막대기 위에 놓는 경우 완전히 포함되도록 놓되, 끝점은 겹치지 않도록 놓는다. - 각 쇠막대기를 자르는 레이저는 적어도 하나 존재한다. - 레이저는 어떤 쇠막대기의 양 끝점과도 겹치지 않는다. 아래 그림은 위 조건을 만족하는 예를 보여준다. 수평으로 그려진 굵은 실선은 쇠막대기이고, 점은 레이저의 위치,수직으로 그려진 점선 화살표는 레이저의 발사 방향이다. 이러한 레이저와 쇠막대기의 배치는 다음과 같이 괄호를 이용하..
-
JUNGOL 실력키우기 1221 : 후위표기법보관함 2018. 11. 12. 01:07
우리가 일반적으로 사용하는 계산방식은 중위표기법(Infix Notation)이라 하는데, A + B와 같이 피연산자 'A'와 'B' 중간에 연산자 '+'가 위치하여 이렇게 불린다. 컴퓨터공학에서는 후위표기법 (Postfix Notation)을 많이 사용하는데, 후위표기법은 A B + 와 같이 피연산자 'A'와 'B'의 뒤에 연산자 '+'가 위치한 표기법을 말한다. 중위표기법에서 (5+8)*2 와 같은 수식은 '*'가 '+'보다 연산자 우선순위가 높으므로 앞의 수식 에서처럼 5+8 을 먼저 계산해야한다면 괄호를 사용해야한다. 하지만 수식 (5+8)*2 을 후위표기법으로 바꾸면 5 8 + 2 * 와 같이 되어, 후위표기법은 괄호가 없이도 연산자의 우선 순위 를 명확히 할 수 있다는 장점이 있다. 이런 이유로..
-
JUNGOL 실력키우기 1295 : 이진탐색보관함 2018. 11. 11. 23:53
오름차순의 순서대로 정렬되어 있는 N개의 데이터에서 특정한 숫자가 몇 번째 위치에 있는지를 알아내는 프로그램을 작성하시오.각 데이터 값의 범위는 정수범위이다. 첫 줄에 N이 주어진다. N은 정렬되어 주어지는 데이터의 수이다.(1≤N≤50,000) 둘째 줄에는 N개의 서로 다른 수가 정렬되어 주어진다. 각 수는 공백 하나로 분리되어 주어진다. 셋째 줄에는 데이터에서 찾아야할 특정한 수의 개수 T가 주어진다. 즉, T가 3이면 3개의 수를 정렬된 데이터에서 찾아야 한다.(1≤T≤10,000) 넷째 줄에는 T개의 수가 공백 하나로 분리되어 주어진다. 찾아야할 수가 정렬되어 주어진 데이터의 수중에서 앞에서부터 몇 번째에 있는지 그 위치를 출력한다. 첫 번째 위치는 1이다. 만약, 찾으려는 수가 주어지는 데이터에..
-
JUNGOL 실력키우기 1814 : 삽입정렬 횟수 세기보관함 2018. 11. 11. 23:31
임의의 서로 같지 않은 수로 이루어진 수열 A를 삽입정렬을 하고자 한다.만약 배열 A에 20, 40, 30, 10 이 들어갈 경우 다음과 같이 삽입정렬이 이루어진다.i = 1 일 때 20, 40, 30, 10 이동수 : 0 i = 2 일 때 20, 40, 30, 10 이동수 : 0 i = 3 일 때 20, 30, 40, 10 이동수 : 1 (40이 움직이고 30이 들어감) i = 4 일 때 10, 20, 30, 40 이동수 : 3 (20, 30, 40 이 움직이고 10이 들어감)총 4번의 밀어내기를 통하여 삽입정렬이 완료된다.임의의 수열 A가 주어질 경우, 수열의 숫자가 얼마나 이동하는지 출력하는 프로그램을 작성하시오. 처음 줄에는 수열의 개수 N(1≤N≤50)이 입력된다. 다음 줄에는 N개의 -1000..
-
JUNGOL 실력키우기 1157 : 버블정렬보관함 2018. 11. 11. 23:10
거품 정렬(Bubble sort)이란? 두 인접한 원소를 검사하여 자리를 바꾸는 과정을 반복하며 정렬하는 방법이다. 다음과 같은 과정으로 정렬을 한다. 1. 첫번째 값과 두번째 값을 비교하여 첫번째 값이 크면 자리를 바꾼다. 2. 두번째 값과 세번째 값을 비교하여 두번째 값이 크면 자리를 바꾼다. 3. 위와 같이 반복하여 N-1번째 값과 N번째 값을 비교하여 N-1번째 값이 크면 자리를 바꾼다. 이 단계가 끝나면 N번째에 가장 큰 수가 자리하게 된다. (한단계완료) 4. N번째를 제외하고 1~3을 반복하면 N-1번째에 두 번째로 큰수가 자리한다. (2단계 완료) 5. 위와같은 작업을 N-1번 반복하면 모든 데이터가 순서대로 정렬된다.예를 들어 수열 {62, 23, 32, 15} 가 있을 때 아래와 같은 ..
-
JUNGOL 실력키우기 1158 : 삽입정렬보관함 2018. 11. 10. 17:02
삽입정렬(Insertion sort)은 자료 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여, 자신의 위치를 찾아 삽입하는 방법이다. 수열이 {5 4 3 7 6}이 있을 경우의 삽입정렬 과정은 다음과 같다. 처음상태에서 처음 값 5 앞에 아무것도 없으므로 5는 이미 정렬된 상태가 되므로, 이후 4부터 정렬과정을 살펴보자. ※ 3단계의 경우 7은 앞의 "3 4 5"보다 크므로 제자리에 삽입된다.n개의 수열이 주어지면 위와 같은 방법으로 정렬하는 과정 각 단계를 출력하는 프로그램을 작성하시오. 첫줄에 수열의 길이 N(4≤N≤100)이 주어진다. 두 번째 줄에 N개의 0이상 100이하의 정수가 주어진다. 처음 상태를 제외하고 정렬과정의 각 단계별 결과를 "출력예"와 같이 출력한다. 5..