* 참고 자료 : Do it! 자료구조와 함께 배우는 알고리즘 입문 자바편
Q1. 네 값의 최댓값을 구하는 max4 메서드를 작성하세요.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
package Chapter1;
public class pratice {
static int max4(int a, int b, int c, int d) {
int max = a;
if(b > max) max = b;
if(c > max) max = c;
if(d > max) max = d;
return max;
}
public static void main(String[] args) {
System.out.println("max4(1,2,3,4) = " + max4(1,2,3,4));
System.out.println("max4(4,3,2,1) = " + max4(4,3,2,1));
System.out.println("max4(3,2,4,1) = " + max4(3,2,4,1));
System.out.println("max4(2,3,4,1) = " + max4(2,3,4,1));
}
}
|
cs |
Q2. 세 값의 최솟값을 구하는 min3 메서드를 작성하세요.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
package Chapter1;
public class pratice {
static int min3(int a, int b, int c) {
int min = a;
if(b < min) min = b;
if(c < min) min = c;
return min;
}
public static void main(String[] args) {
System.out.println("min3(1,2,3) = " + min3(1,2,3));
System.out.println("min3(4,3,2) = " + min3(4,3,2));
System.out.println("min3(3,2,4) = " + min3(3,2,4));
System.out.println("min3(2,3,4) = " + min3(2,3,4));
}
}
|
cs |
Q3. 네 값의 최솟값을 구하는 min4 메서드를 작성하세요.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
package Chapter1;
public class pratice {
static int min4(int a, int b, int c, int d) {
int min = a;
if(b < min) min = b;
if(c < min) min = c;
if(d < min) min = d;
return min;
}
public static void main(String[] args) {
System.out.println("min4(1,2,3,4) = " + min4(1,2,3,4));
System.out.println("min4(4,3,2,1) = " + min4(4,3,2,1));
System.out.println("min4(3,2,4,1) = " + min4(3,2,4,1));
System.out.println("min4(2,3,4,1) = " + min4(2,3,4,1));
}
}
|
cs |
Q4. 세 값의 대소 관계 13종류의 모든 조합에 대해 중앙값을 구하여 출력하는 프로그램을 작성하세요.
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
|
package Chapter1;
public class pratice {
static int med3(int a, int b, int c) {
if (a >= b)
if(b >= c)
return b;
else if (a <= c)
return a;
else
return c;
else if (a > c)
return a;
else if (b > c)
return c;
else
return b;
}
public static void main(String[] args) {
System.out.println("med3(3,2,1) = " + med3(3,2,1));
System.out.println("med3(3,2,2) = " + med3(3,2,2));
System.out.println("med3(3,1,2) = " + med3(3,1,2));
System.out.println("med3(3,2,3) = " + med3(3,2,3));
System.out.println("med3(2,1,3) = " + med3(2,1,3));
System.out.println("med3(3,3,2) = " + med3(3,3,2));
System.out.println("med3(3,3,3) = " + med3(3,3,3));
System.out.println("med3(2,2,3) = " + med3(2,2,3));
System.out.println("med3(2,3,1) = " + med3(2,3,1));
System.out.println("med3(2,3,2) = " + med3(2,3,2));
System.out.println("med3(1,3,2) = " + med3(1,3,2));
System.out.println("med3(2,3,3) = " + med3(2,3,3));
System.out.println("med3(1,2,3) = " + med3(1,2,3));
}
}
|
cs |
Q5. 중앙값을 구하는 메서드는 다음과 같이 작성할 수도 있습니다. 그러나 실습 1C-1의 med3 메서드에 비해 효율이 떨어지는데, 그 이유를 설명하시오.
1
2
3
4
5
6
7
8
9
10
11
|
static int med3(int a, int b, int c) {
if((b >= a && c <= a) || (b <= a && c >= a))
return a;
else if((a > b && c < b) || (a < b && c > b))
return b;
return c;
}
// 첫번째 if문에있는 b>=a 와 b<=a 는 수식만 보면 다르다고 생각할 수 있지만
// 수식만 뒤집은 차이고 실질적으로는 같은 판단이므로 효율이 나빠진다.
// 첫번째 if문이 성립한 후 두번째 else if문에서 첫번째 if문과 실질적으로
// 같은 수식을 수행하므로 효율이 나빠진다.
|
cs |
Q6. 실습 1-4에서 while문이 종료될 때 변수 i의 값이 n + 1이 됨을 확인하세요( 변수 i 값을 출력하도록 프로그램을 수정하세요).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
package Chapter1;
import java.util.Scanner;
public class pratice{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("1부터 n까지의 합을 구합니다.");
System.out.print("n의 값 : ");
int n = sc.nextInt();
int sum = 0;
int i = 1;
while(i <= n) {
sum += i;
i++;
}
System.out.println("1부터 " + n + "까지의 합은 " + sum + "입니다.");
System.out.println("i의 값은 ? "+ i);
}
}
|
cs |
Q7. 실습 1-5 프로그램을 참고하여 n이 7이면 '1 + 2 + 3 + 4 + 5 + 6 + 7 = 28'로 출력하는 프로그램을 작성하세요.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
package Chapter1;
import java.util.Scanner;
public class pratice{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("1부터 n까지의 합을 구합니다.");
System.out.print("n의 값 : ");
int n = sc.nextInt();
int sum = 0;
for(int i = 1; i <= n; i++) {
sum += i;
if(i < n)
System.out.print(i + " + ");
else if(i == n)
System.out.print(i + " = " + sum);
}
}
}
|
cs |
Q8. 1부터 10까지의 합은 (1+10) * 5와 같은 방법으로 구할 수 있습니다. 가우스의 덧셈이라는 방법을 이용하여 1부터 n까지의 정수 합을 구하는 프로그램을 작성하세요.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
package Chapter1;
import java.util.Scanner;
public class pratice{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("1부터 n까지의 합을 구합니다.");
System.out.print("n의 값 : ");
int n = sc.nextInt();
int sum = (n + 1) * (n / 2) + (n % 2 == 1 ? (n + 1) / 2 : 0);
System.out.println("1부터 "+n+"까지의 합은 = "+sum);
}
}
|
cs |
Q9. 정수 a, b를 포함하여 그 사이의 모든 정수의 합을 구하여 반환하는 아래 메서드를 작성하세요.
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
|
package Chapter1;
import java.util.Scanner;
public class pratice{
static int sumof(int a, int b) {
int min = 0;
int max = 0;
if(a > b) {
min = b;
max = a;
}
else {
min = a;
max = b;
}
int sum = 0;
for(int i = min; i <= max; i++) {
sum += i;
}
return sum;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("a의 값을 입력하시오 : ");
int a = sc.nextInt();
System.out.print("b의 값을 입력하시오 : ");
int b = sc.nextInt();
System.out.println("a부터 b까지의 합은 ? " + sumof(a, b));
}
}
|
cs |
Q10. 오른쪽과 같이 두 변수 a, b에 정수를 입력하고 b - a를 출력하는 프로그램을 작성하세요.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
package Chapter1;
import java.util.Scanner;
public class pratice{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("a의 값 : ");
int a = sc.nextInt();
int b = 0;
while(true) {
System.out.print("b의 값 : ");
b = sc.nextInt();
if(a < b)
break;
System.out.println("a보다 큰 값을 입력하세요!");
}
System.out.println("b - a는 " + (b-a) + "입니다.");
}
}
|
cs |
Q11. 양의 정수를 입력하고 자릿수를 출력하는 프로그램을 작성하세요. 예를들어 135를 입력하면 ' 그 수는 3자리입니다.' 라고 출력하고, 1314를 입력하면 ' 그 수는 4자리입니다. ' 라고 출력하면 됩니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
package Chapter1;
import java.util.Scanner;
public class pratice{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("양의 정수를 입력하시오 : ");
int number = sc.nextInt();
while(true) {
if(number > 0)
break;
System.out.print("양의 정수를 입력하시오 : ");
number = sc.nextInt();
}
int count = 0;
while(number > 0) {
number /= 10;
count++;
}
System.out.println("그 수는 " + count + "자리입니다.");
}
}
|
cs |
Q12. 오른쪽과 같이 위쪽과 왼쪽에 곱하는 수가 있는 곱셈표를 출력하는 프로그램을 작성하세요.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
package Chapter1;
public class pratice{
public static void main(String[] args) {
System.out.println(" | 1 2 3 4 5 6 7 8 9 ");
System.out.println("-------------------------------");
for(int i = 1; i <= 9; i++) {
System.out.printf("%2d |",i);
for(int j = 1; j <= 9; j++) {
System.out.printf("%3d", i*j);
}
System.out.println();
}
}
}
|
cs |
Q13. 곱셈이 아니라 덧셈을 출력하는 프로그램을 작성하세요.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
package Chapter1;
public class pratice{
public static void main(String[] args) {
System.out.println(" | 1 2 3 4 5 6 7 8 9 ");
System.out.println("-------------------------------");
for(int i = 1; i <= 9; i++) {
System.out.printf("%2d |",i);
for(int j = 1; j <= 9; j++) {
System.out.printf("%3d", i+j);
}
System.out.println();
}
}
}
|
cs |
Q14. 오른쪽과 같이 입력한 수를 한 변으로 하는 정사각형을 * 기호로 출력하는 프로그램을 작성하세요.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
package Chapter1;
import java.util.Scanner;
public class pratice{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("사각형을 출력합니다.");
System.out.print("단 수 : ");
int number = sc.nextInt();
for(int i = 0; i < number; i++) {
for(int j = 0; j < number; j++) {
System.out.print("* ");
}
System.out.println();
}
}
}
|
cs |
Q15. 직각 이등면 삼각형을 출력하는 부분을 아래와 같은 형식의 메서드로 작성하세요. 또 왼쪽 위, 오른쪽 위, 오른쪽 아래가 직각인 이등변 삼각형을 출력하는 메서드를 작성하세요.
(1) 왼쪽 아래가 직각인 이등변 삼각형
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
package Chapter1;
import java.util.Scanner;
public class pratice{
static void triangleLB(int B) {
for(int i = 0; i < B; i++) {
for(int j = 0; j <= i; j++) {
System.out.print("*");
}
System.out.println();
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int number;
System.out.println("왼쪽 아래가 직각인 이등변 삼각형을 출력합니다.");
do {
System.out.print("몇 단 입니까? ");
number = sc.nextInt();
}while(number <= 0);
triangleLB(number);
}
}
|
cs |
(2) 왼쪽 위가 직각인 이등변 삼각형
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
package Chapter1;
import java.util.Scanner;
public class pratice{
static void triangleLU(int B) {
for(int i = B; i >= 1; i--) {
for(int j = 1; j <= i; j++) {
System.out.print("*");
}
System.out.println();
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int number;
System.out.println("왼쪽 위가 직각인 이등변 삼각형을 출력합니다.");
do {
System.out.print("몇 단 입니까? ");
number = sc.nextInt();
}while(number <= 0);
triangleLU(number);
}
}
|
cs |
(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
|
package Chapter1;
import java.util.Scanner;
public class pratice{
static void triangleRU(int B) {
for(int i = 0; i < B; i++) {
for(int j = 0; j < B; j++) {
if( j >= i)
System.out.print("*");
else
System.out.print(" ");
}
System.out.println();
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int number;
System.out.println("오른쪽 위가 직각인 이등변 삼각형을 출력합니다.");
do {
System.out.print("몇 단 입니까? ");
number = sc.nextInt();
}while(number <= 0);
triangleRU(number);
}
}
|
cs |
(4) 오른쪽 아래가 직각인 이등변 삼각형
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
|
package Chapter1;
import java.util.Scanner;
public class pratice{
static void triangleRB(int B) {
for(int i = B-1; i >= 0; i--) {
for(int j = 0; j < B; j++) {
if( j >= i)
System.out.print("*");
else
System.out.print(" ");
}
System.out.println();
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int number;
System.out.println("오른쪽 아래가 직각인 이등변 삼각형을 출력합니다.");
do {
System.out.print("몇 단 입니까? ");
number = sc.nextInt();
}while(number <= 0);
triangleRB(number);
}
}
|
cs |
Q16. n단의 피라미드를 출력하는 메서드를 작성하세요
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
package Chapter1;
import java.util.Scanner;
public class pratice{
static void spira(int n) {
for(int i = 0; i < n; i++) {
for(int j = 1; j < n - i; j++)
System.out.print(" ");
for(int k = 0; k < i*2+1; k++)
System.out.print("*");
System.out.println();
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int number;
System.out.println("피라미드를 출력하시오.");
do {
System.out.print("몇 단 입니까? ");
number = sc.nextInt();
}while(number <= 0);
spira(number);
}
}
|
cs |
Q17. 오른쪽과 같이 아래를 향한 n단의 숫자 피라미드를 출력하는 메서드를 작성하세요.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
package Chapter1;
import java.util.Scanner;
public class pratice{
static void npira(int n) {
for(int i = 0; i < n; i++) {
for(int j = 1; j < n - i; j++)
System.out.print(" ");
for(int k = 0; k < i*2+1; k++)
System.out.print(i+1);
System.out.println();
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int number;
System.out.println("피라미드를 출력하시오.");
do {
System.out.print("몇 단 입니까? ");
number = sc.nextInt();
}while(number <= 0);
npira(number);
}
}
|
cs |