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));
	}
}



댓글남기기