Doit 알고리즘
업데이트:
난수 사용
배열의 요소에 값을 하나씩 입력하는 대신 각 요소에 난수를 대입할 수 있다.
- 난수 생성
- Random클래스를 간단한 이름을 사용하기 위해 import 선언을 한다.
- Random클래스의 변수를 만들기 위한 선언을 한다.
- 변수에 대한 난수를 생성하는 메서드 nextInt를 호출한다.
- nextInt(n)이 반환하는 것은 0부터 n-1까지의 난수이다.
- nextBoolean(), nextInt(), nextLong(), nextDouble(), nextFloat()
- java.lang.Math 클래스는 기본 패키지이기 때문에 import하지 않고 Math.random()을 이용할 수 있다.
- 난수 발생 범위 : 0.0 <= random < 1.0 (double)
- 실습
package doit.algorism.practice;
import java.util.Random;
import java.util.Scanner;
public class chap02 {
static int maxOf(int[] a) {
int max = a[0];
for(int i=1; i<a.length; i++) {
if(a[i]>max) {
max = a[i];
}
}
return max;
}
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
Random rand = new Random();
System.out.print("사람 수 : ");
int n = sc.nextInt();
int[] height = new int[n];
for(int i=0; i<height.length; i++) {
height[i] = 100 + rand.nextInt(90);
// height[i] = (int)(Math.random()*90+100);
// 두 방법 모두 100~189 사이의 난수가 발생한다.
System.out.println("height[" + i + "] : "+ height[i]);
}
System.out.println("최대값은 " + maxOf(height) + "입니다.");
}
}
연습 문제
- 사람 수와 키를 난수로 생성하기
package doit.algorism.practice;
import java.util.Random;
public class chap02 {
static int maxOf(int[] a) {
int max = a[0];
for(int i=1; i<a.length; i++) {
if(a[i]>max) {
max = a[i];
}
}
return max;
}
public static void main(String args[]) {
Random rand = new Random();
int n = 1 + rand.nextInt(5); // 1~5
// int n = (int)(Math.random() * 5 + 1);
System.out.println("사람 수 : " + n);
int[] height = new int[n];
for(int i=0; i<height.length; i++) {
height[i] = 100 + rand.nextInt(90);
// height[i] = (int)(Math.random()*90+100);
System.out.println("height["+i+"] : " + height[i]);
}
System.out.println("최대값 : " + maxOf(height) );
}
}
배열 역순 정렬
교환 횟수 : 요소 개수/2 교환 방법
for(i=0; i<n/2 ; i++){
// a[i]와 a[n-i-1]의 값을 교환
}
- 두 값의 교환 교환을 위해 같은 자료형을 가진 변수 t를 하나 더 사용한다.
t = a[idx1];
a[idx2] = a[idx2];
a[idx2] = t;
연습 문제
- 배열 요소를 역순으로 정렬하는 과정
package doit.algorism.practice;
import java.util.Scanner;
public class chap02 {
static void swap(int[] a, int idx1, int idx2) {
int t = a[idx1];
a[idx1] = a[idx2];
a[idx2] = t;
}
static void print(int[] a) {
for(int i=0; i<a.length; i++) {
System.out.print(a[i] + " ");
}
System.out.println();
}
static void reverse(int[] a) {
for(int i=0; i<a.length/2; i++) {
System.out.println("a[" + i + "] 와 " + "a[" +(a.length-i-1)+"]" + "을 교환합니다.");
swap(a, i, a.length-i-1 );
print(a);
}
}
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
System.out.print("요소 수 : ");
int n = sc.nextInt();
int[] x = new int[n];
for(int i=0; i<x.length;i++) {
System.out.print("값 : ");
x[i] = sc.nextInt();
}
for(int i=0; i<x.length; i++) {
System.out.print(x[i] + " ");
}
System.out.println();
reverse(x);
System.out.println("역순 정렬을 마쳤습니다.");
}
}
- 배열 a의 모든 요소의 합계를 구하여 반환하는 메소드
package doit.algorism.practice;
import java.util.Scanner;
public class chap02 {
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 n = sc.nextInt();
int[] x = new int[n];
for(int i=0; i<x.length; i++) {
System.out.print("x["+i+"] : ");
x[i] = sc.nextInt();
}
System.out.println("총 합 : " + sumOf(x));
}
}
공유하기
Twitter Google+ LinkedIn
댓글남기기