Doit 알고리즘

업데이트:

네 값의 최댓값을 구하기

값을 일일이 입력하면서 테스트하기보단 메소드로 처리하면 편하다.

package doit.algorism.practice;

public class chap01 { 
	
	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(5,4,3,2)의 최대값 : " + max4(5,4,3,2));
		System.out.println("max4(5,4,6,2)의 최대값 : " + max4(5,4,6,2));
		System.out.println("max4(1,4,4,2)의 최대값 : " + max4(1,4,4,2));
		System.out.println("max4(3,4,7,1)의 최대값 : " + max4(3,4,7,1));
		System.out.println("max4(2,1,3,2)의 최대값 : " + max4(2,1,3,2));
		System.out.println("max4(1,4,1,2)의 최대값 : " + max4(1,4,1,2));
		System.out.println("max4(3,9,1,2)의 최대값 : " + max4(3,9,1,2));
	}
}



세 값의 최솟값 구하기

package doit.algorism.practice;

public class chap01 { 
	
	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(5,3,4)의 최솟값 = " + min3(5,3,4));
		System.out.println("min3(2,1,3)의 최솟값 = " + min3(2,1,3));
		System.out.println("min3(11,25,4)의 최솟값 = " + min3(11,25,4));
		System.out.println("min3(21,9,6)의 최솟값 = " + min3(21,9,6));
		System.out.println("min3(1,5,3)의 최솟값 = " + min3(1,5,3));
		System.out.println("min3(11,7,8)의 최솟값 = " + min3(11,7,8));
	}
}



네 값의 최솟값 구하기

package doit.algorism.practice;

public class chap01 { 
	
	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(5,8,1,3)의 최솟값 = " + min4(5,8,1,3));
		System.out.println("min4(9,3,11,6)의 최솟값 = " + min4(9,3,11,6));
		System.out.println("min4(5,7,9,2)의 최솟값 = " + min4(5,7,9,2));
		System.out.println("min4(25,8,15,6)의 최솟값 = " + min4(25,8,15,6));
		System.out.println("min4(1,4,6,7)의 최솟값 = " + min4(1,4,6,7));
	}
}



세 값에 대해 중앙값 구하기

package doit.algorism.practice;

public class chap01 { 
	
	static int med3(int a, int b, int c) {
		if(a>=b) {
			if(b>=c) {
				return b;
			}else if(c>a) {
				return a;
			}else {
				return c;
			}
		}else if(a>c) { // 위 if문에서 이미 a는 b와 같지 않고 작다고 판별 남.
			return a;
		}else if(b>c) {
			return c;
		}else {
			return b;
		}
	}
	
	public static void main(String args[]) {
		
		System.out.println("med3(6,1,3) 의 중앙값 : " + med3(6,1,3));
		System.out.println("med3(3,2,1) 의 중앙값 : " + med3(3,2,1));
		System.out.println("med3(7,3,6) 의 중앙값 : " + med3(7,3,6));
		System.out.println("med3(2,4,9) 의 중앙값 : " + med3(2,4,9));
		System.out.println("med3(6,2,7) 의 중앙값 : " + med3(6,2,7));
	}
}



  • 중앙 값을 구하는 메서드는 다음과 같이 작성할 수도 있음.
    하지만 위 메소드에 비해 효율이 떨어진다. 그 이유는?
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;
    }else{
        return c;
    }
}

가장 처음의 if가 성립한 경우, 2번째 if문에서도 같은 판단을 수행하므로 효율이 나빠진다.



while문을 이용해 반복이 종료된 후 변수 i값이 n+1이 되는지, i값 출력하기

package doit.algorism.practice;

public class chap01 { 

import java.util.Scanner;
	
	public static void main(String args[]) {		

        Scanner sc = new Scanner(System.in);

        System.out.print("n의 값 : ");
        int n = sc.nextInt();
		
		int sum = 0;
		int i = 1;
		
		while(i<=n) {
			sum += i;
			i++;
		}

		System.out.println("총 합 : " + sum);
		System.out.println("i값 : " + i);
	}
}



for문을 이용해 n이 7일경우 ‘1+2+3+4+5+6+7=28’로 출력하기

package doit.algorism.practice;

import java.util.Scanner;

public class chap01 { 
	
	public static void main(String args[]) {		
		
        Scanner sc = new Scanner(System.in);
        
        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 + " = " + sum);
	    	}else {
	    		System.out.print(i + " + ");
	    	}
	    }
	}
}



가우스의 덧셈 방법을 이용하여 1부터 n까지의 정수 합을 구하기

가우스의 덧셈 : (n × (n+1)) / 2 만약 n이 100이라면, 101을 100번 곱한 값을 2로 나누면 1부터 100까지의 값을 구할 수 있다.

package doit.algorism.practice;

import java.util.Scanner;

public class chap01 { 
	
	public static void main(String args[]) {		
		
        Scanner sc = new Scanner(System.in);
        
        System.out.print("n의 값 : ");
        int n = sc.nextInt();
		
	    int sum = n*(n+1) /2;
	    
	    System.out.println("1부터 " + n + " 까지의 총 합 : " + sum);
	}
}



정수 a,b를 포함하여 그 사이의 모든 정수의 합을 구하여 반환하는 메서드

package doit.algorism.practice;

import java.util.Scanner;

public class chap01 { 
	
	static int sumof(int a, int b) {
		int sum = 0;
		
		if(a<b) {
			for(int i=a; i<=b; i++) {
				sum += i;
			}
		}else {
			for( int i=b; i<=a; 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.print("총 합 : " + sumof(a,b));
	}
}



댓글남기기