기본 수열(1부터 100까지 자연수)
정의 : 수열은 일정한 규칙에 따라 숫자들이 차례대로 나열된 것을 말한다. 수열의 각 숫자를 항이라고 부른다.
문제 : 1부터 100까지 자연수의 합을 구하는 알고리즘을 제시하라.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
public class Sequence {
public static void main(String[] args) {
int sum = 0; // 합계 변수.
int n = 1; // 수열의 항 변수.
while(true) {
sum = sum + n; // 수열의 현재 항 n을 누산.
n = n + 1; // 1씩 증가.
if(n > 100) break; // 수열의 마지막 항까지
// 처리했으면 작업을 종료한다.
}
System.out.println(sum); // 5050
}
}
|
cs |
등차 수열
정의 : 각 항에 일정한 수를 더하여 다음 항을 만든다는 규칙을 갖는다. 여기에 더해지는 수를 공차라고 부른다.
문제 : 다음 등차 수열에 대하여 200번째 숫자까지의 합을 구하는 알고리즘을 제시하라(2, 8, 14, 20, 26, 32, ...).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
public class ArithmeticSequence {
public static void main(String[] args) {
int a = 2; // 수열의 초항.
int d = 6; // 공차.
int s = a; // 200번째 항까지의 합.
int n = 2; // 등차 수열의 항 순서.
int an = 0; // n번째 항 계산값.
while(true) {
/*
* 2번째 항 : 2+(2-1)*6 = 8
* 3번째 항 : 2+(3-1)*6 = 14
* 4번째 항 : 2+(4-1)*6 = 20
* ... a+(n-1)*d
*/
an = a + (n - 1) * d;
s = s + an;
n = n + 1;
if(n > 200) break; // n == 201도 가능.
}
System.out.println(s); // 119800
}
}
|
cs |
등비 수열
정의 : 각 항에 일정한 수를 곱하여 다음 항을 만든다는 규칙을 갖는다. 곱해지는 수를 공비라고 부른다.
문제 : 다음 등비 수열에 대하여 100번째 항까지의 합을 구하는 알고리즘을 제시하라(2, 6, 18, 54, 162, 486, ...).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
public class GeometricSequence {
public static void main(String[] args) {
int r = 3; // 공비.
int a = 2; // 수열의 초항.
int s = a; // 합계 변수.
int n = 2; // 등비 수열의 항 순서.
while (true) {
/*
* 2번째 항 : 2*3 = 6
* 3번째 항 : 6*3 = 18
* 4번째 항 : 18*3 = 54
* ... a * r
*/
a = a * r;
s = s + a;
n = n + 1;
if (n > 10)
break; // 10번째 항까지.
}
System.out.println(s); // 59048
}
}
|
cs |
피보나치 수열
정의 : 1, 1, 2, 3, 5, 8, ... 과 같이 앞의 연속된 2개 항을 합하여 새로운 항을 생성하는 수열을 말한다. 피보나치 수열의 처음 2개 항은 1, 1, 이다.
문제 : 다음 피보나치 수열에 대하여 100번째 항까지의 합을 구하는 알고리즘을 제시하라.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
public class FibonacciNumbers {
public static void main(String[] args) {
int a = 1, b = 1; // 1,2번째 항.
int c = 0; // 다음항 생성 변수.
int s = a + b; // 합계 변수.
int n = 2; // 계산 완료된 항의 개수.
while(true) {
c = a + b; // 1 + 1 = 2.
s = s + c; // 1 + 1 + 2 = 4.
a = b; // 1 <= 1.
b = c; // 1 <= 2.
n = n + 1;
if(n == 100) break;
}
System.out.println(s); // 1445263495
}
}
|
cs |
누승 활용 수열
문제 : 1부터 100까지의 누승의 합 S = 1! + 2! + 3! + 4! + 5! + ... + 100!을 구하여 출력하는 알고리즘을 제시하라
(단, N!은 자연수 N에 대한 누승(Factorial)으로서 1부터 N까지의 곱을 말한다).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
public class FactorialSequence {
public static void main(String[] args) {
int n = 1; // 인덱스 변수.
int f = 1; // n에 대한 누승 보관 변수.
int s = 1; // 합계 변수.
while (true) {
/*
* 1! = 1
* 2! = 1! * 2 = 1 * 2 = 2
* 3! = 2! * 3 = 2 * 3 = 6
* 4! = 3! * 4 = 6 * 4 = 24 ...
*/
n = n + 1;
f = f * n;
s = s + f;
if (n == 10) // 10까지 계산 제한.
break;
}
System.out.println(s); // 4037913
}
}
|
cs |
제곱의 합
문제 : S = (100X1)^2 + (99X2)^2 + (98X3)^2 + ... + (3X98)^2 + (2X99)^2 + (1X100)^2의 합을 구하여 출력하는 알고리즘을 제시하라.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public class SumOfSquares {
public static void main(String[] args) {
int a = 0; // 오른쪽 수.
int b = 0; // 왼쪽 수.
int c = 0; // 제곱 계산 변수.
int s = 0; // 합계 변수.
do {
a = a + 1; // 오른쪽 수 1씩 증가.
b = 101 - a; // 왼쪽 수 1씩 감소.
c = b * a; // b*a = (100*1) ...
c = c * c; // c*c = (100*1)*(100*1) ...
s = s + c;
} while (a < 100); // 100까지.
System.out.println(s); // 350336680
}
}
|
cs |
"+, -" 교행 자연수 수열
문제 : S = 1 - 2 + 3 - 4 + 5 - 6 + ... - 100의 값을 구하여 출력하는 알고리즘을 제시하라.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
public class CrossingNaturalNumberSequence {
public static void main(String[] args) {
int n = 0; // 증가값.
int s = 0; // 합계 변수.
do {
/*
* 홀수번째 항일 경우 +
* 짝수번째 항일 경우 -
*/
n = n + 1;
s = s + n; // 홀수번째 항.
n = n + 1;
s = s - n; // 짝수번째 항.
} while(n != 100);
System.out.println(s); // -50
}
}
|
cs |
"+, -" 교행 분수 수열
문제 : 다음과 같은 형태로 나타나는 수열의 합을 구하여 출력하는 알고리즘을 제시하라.
S = 1/(2X3) - 2/(3X4) + 3/(4X5) - 4/(5X6) + ... - 48/(49X50) + 49/(50X51)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
public class CrossingFractionSequence {
public static void main(String[] args) {
int k = 0; // 증가값.
double s = 0; // 합계 변수.
int sw = 0; // '+,-' 토글 스위치 변수.
double l = 0; // 계산값 보관 변수.
do {
k = k + 1;
l = (double) k / ((k + 1) * (k + 2));
if (sw == 0) { // sw가 0일 때 +.
s = s + l;
sw = 1;
} else { // sw가 1일 때 -.
s = s - l;
sw = 0;
}
} while (k != 49);
System.out.println(s); // 0.08895716800226436
}
}
|
cs |
'정보처리산업기사 실기 > 알고리즘' 카테고리의 다른 글
알고리즘 기출문제 파악(20년 3회 ~ 15년 1회) (0) | 2020.11.20 |
---|---|
소프트웨어 개발 (0) | 2020.11.17 |
응용 알고리즘 - 자료 구조 (0) | 2020.11.17 |
응용 알고리즘 - 배열 (0) | 2020.11.16 |
기본 알고리즘 - 수학 (0) | 2020.11.15 |