Doit! 알고리즘 (4)
업데이트:
chap02-01
package chap02;
import java.util.Random;
public class Q1 {
static int maxOf(int[] a) {
int max = a[0];
for(int i = 0; i < a.length; i++) {
if(max < a[i]) max = a[i];
}
return max;
}
public static void main(String[] args) {
Random rand = new Random();
System.out.println("키의 최댓값 구하기");
System.out.print("사람 수 : ");
int n = rand.nextInt(11);
System.out.println(n);
int[] height = new int[n];
System.out.println("키 값은 아래와 같음");
for(int i = 0; i < n; i++) {
height[i]= 100 + rand.nextInt(90); // 요소의 값을 난수로 결정
System.out.println("height[" + i + "] : " + height[i]);
}
System.out.println("최댓값은 " + maxOf(height)+ "입니다." );
}
}
chap02-02
package chap02;
import java.util.Scanner;
public class Q2 {
static void swap(int[]x, int idx1, int idx2) {
int t = x[idx1];
x[idx1] = x[idx2];
x[idx2] = t;
}
static void reverse(int[] x) {
for(int i = 0; i < x.length / 2; i++) {
for(int j = 0; j < x.length; j++) {
System.out.print(x[j] + " ");
}
System.out.println("\nx[" + i + "]과(와) x[" + (x.length - i -1) + "]를 교환합니다.");
swap(x, i, x.length - i - 1);
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("요솟수 : ");
int num = sc.nextInt();
int[] x = new int[num];
for(int i = 0; i < num; i++) {
System.out.print("x[" + i + "] : ");
x[i] = sc.nextInt();
}
reverse(x);
System.out.println("역순 정렬 마쳤습니다.");
}
}
답안에서는 이 부분을 print
라는 메소드를 만들어 reverse 메소드 내에서 print 메소드를 호출한다.
static void print(int[] a) {
for (int i = 0; i < a.length; i++)
System.out.print(a[i] + " ");
System.out.println();
}
chap02-03
package chap02;
import java.util.Scanner;
public class Q3 {
static int sumOf(int[] a) {
int sum = 0;
for(int i = 0; i < a.length; i++) {
sum += a[i];
}
return sum;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("요솟수 : ");
int num = sc.nextInt();
int[] a = new int[num];
for(int i = 0; i < num; i++) {
System.out.print("a[" + i + "] : ");
a[i] = sc.nextInt();
}
System.out.println("배열 a의 모든 요소 합계 : " + sumOf(a));
}
}
chap02-04
package chap02;
import java.util.Scanner;
public class Q4 {
static void copy(int[] a, int[] b) {
int num = a.length;
if(a.length >= b.length) {
num = b.length;
}
for(int i = 0; i < num; i++) {
a[i] = b[i];
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("배열 a의 요솟수 : ");
int numA = sc.nextInt();
int[] a = new int[numA];
for(int i = 0; i < numA; i++) {
System.out.print("a[" + i + "] : ");
a[i] = sc.nextInt();
}
System.out.print("배열 b의 요솟수 : ");
int numB = sc.nextInt();
int[] b = new int[numB];
for(int i = 0; i < numB; i++) {
System.out.print("b[" + i + "] : ");
b[i] = sc.nextInt();
}
copy(a, b);
System.out.println("복사 완료");
for(int i = 0; i < numA; i++) {
System.out.println("a[" + i + "] = " + a[i]);
}
}
}
답안에서는 copy
메소드 안에 for문 제어식에 들어갈 num 부분을 삼항연산자
로 간단하게 구한다.
int num = a.length <= b.length ? a.length : b.length;
삼항연산자는 자주 써보지 않아서 바로 떠올리기가 어렵다😂
chap02-05
package chap02;
import java.util.Scanner;
public class Q5 {
static void rcopy(int[] a, int[] b) {
int num = a.length;
if(a.length >= b.length) {
num = b.length;
}
for(int i = 0; i < num; i++) {
a[i] = b[num - i - 1];
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("배열 a의 요솟수 : ");
int numA = sc.nextInt();
int[] a = new int[numA];
for(int i = 0; i < numA; i++) {
System.out.print("a[" + i + "] : ");
a[i] = sc.nextInt();
}
System.out.print("배열 b의 요솟수 : ");
int numB = sc.nextInt();
int[] b = new int[numB];
for(int i = 0; i < numB; i++) {
System.out.print("b[" + i + "] : ");
b[i] = sc.nextInt();
}
rcopy(a, b);
System.out.println("역순 복사 완료");
for(int i = 0; i < numA; i++) {
System.out.println("a[" + i + "] = " + a[i]);
}
}
}
댓글남기기