임의의 정수가 저장된 변수 a, b, c의 대소관계의 경우의 수는 13개입니다.

 

이를 순서대로 판단하기 위해서는 결정트리 형태를 생각할 수 있습니다.

if - else if를 이용해 대소관계를 판단할 수 있음을 예상할 수 있습니다.

 

연습문제 Q4

import java.util.Scanner;

public class Practice {
	
	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) {
		Scanner scan = new Scanner(System.in);
		
		System.out.println("med of (1,2,3) is "+med3(1,2,3));
		System.out.println("med of (1,3,2) is "+med3(1,3,2));
		System.out.println("med of (2,1,3) is "+med3(2,1,3));
		System.out.println("med of (2,3,1) is "+med3(2,3,1));
		System.out.println("med of (3,1,2) is "+med3(3,1,2));
		System.out.println("med of (3,2,1) is "+med3(3,2,1));
		System.out.println("med of (1,1,2) is "+med3(1,1,2));
		System.out.println("med of (1,2,1) is "+med3(1,2,1));
		System.out.println("med of (2,1,1) is "+med3(2,1,1));
		System.out.println("med of (2,2,1) is "+med3(2,2,1));
		System.out.println("med of (2,1,2) is "+med3(2,1,2));
		System.out.println("med of (1,2,2) is "+med3(1,2,2));
		
	}
}

 

연습문제 Q5

첫번째 if를 만족하면 두번째 if에서 실질적으로 거의 같은 판단(b>=a 와 a<b, b<=a와 a>b)을 한번 더 수행하게 되므로 비효율적이다. 실습 1C-1에서는 트리형식으로 판단하므로 같은 판단을 또 수행하지 않는다. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 이미지 출처 : C언어로 배우는 알고리즘과 자료구조 - 제 1장 :: Burn the bug (tistory.com)

 

C언어로 배우는 알고리즘과 자료구조 - 제 1장

번역 공부 1. 제 1 장 기본적인 알고리즘 1-1 알고리즘이란? [최대값 구하기] 간단한 프로그램을 예로, 알고리즘에 대해서 생각해 봅시다. List 1-1 은 3개의 정수 중 가장 큰 숫자를 구하는 프로그

burnthebug.tistory.com

 

자바에서 키보드로부터 숫자나 문자를 입력받기위해서는 Scanner라는 클래스를 사용하면 됩니다.

 

현재 내가 작성하는 코드에서 사용하려면 import를 이용해 가져오면 되는데요, 바로 import Scanner; 하면 좋겠지만 

 

Scanner는 java.util 이라는 패키지에 들어있습니다. 그래서 import java.util.Scanner; 라는 구문을 전체 프로그램의 앞에

 

작성해야 합니다. 이제 우리는 Scanner라는 기능을 이용하기 위해 직접 코드를 작성하지 않아도 됩니다. 

 

이와같이 자바는 미리 기능을 구현해 놓은 것들을 바로 사용할 수 있게 해두었습니다. 이것을 라이브러리 라고 합니다.

 

---

 

이제 가져온 클래스의 객체를 만들어서 쓰면 됩니다. 객체 변수를 scan으로 한다고 하면,

 

Scanner scan =  new Scanner(System.in);  // Scanner 클래스의 객체 만들기 + 키보드로 입력하겠다고 알리기

scan.nextInt();                                     // 키보드로 입력된 값 중에서 정수를 입력받음.

 

이때 System.in 을 클래스의 매개변수(파라미터)로 넣어주는 것을 볼 수 있습니다. System.in은 키보드와 연결된 표준 입력 스트림입니다. 즉 내가 입력한것으로 입력받겠다는 뜻입니다.

 

nextInt()가 정수를 입력받는다면 소수형, 문자형, 문자열형, 등 다른 타입은 어떻게 입력받나요?

보충수업 1-2 : 자바(java)에서 키보드로 숫자와 문자열 입력하기(2)

 

한편 패키지란 클래스들의 모임이고, 클래스란 메서드들과 변수들의 모임이고, 메서드란 하나의 동작(함수)입니다.

교재에서는 알고리즘을

 

[ 문제를 해결하기 위한 것으로, 명확하게 정의되고 순서가 있는 유한 개의 규칙으로 이루어진 집합 ]

 

으로 정의하고 있습니다.

 

예를들어 변수 a, b, c의 최대값을 max라는 변수를 이용해 구하는 과정은 다음과 같습니다.

① int max = a;            //max에 a값 대입                      

② if(b>max) max = b;   //b > max 이면 max에 b값 대입

③ if(c>max) max = c;   //c > max 이면 max에 c값 대입

 

①, ②, ③ 이 순서대로 실행되면 max에는 a,b,c 중 가장 큰 값이 대입됩니다!

이 메서드에서 max를 return 해서 사용하면 되겠습니다. (메서드란?)

 

순차적 구조, 선택 구조

이렇게 1,2,3이 순서대로 실행되는 것을 순차적(concatenation) 구조라고 하고,

2,3에서 [ ~이면(if문) ]의 결과에 따라 프로그램의 흐름이 바뀌는 것을 선택(selection) 구조라고 합니다. 

 

Scanner가 뭐고 왜 쓰나요? 

보충수업 1-1 : 자바(java)에서 키보드로 숫자와 문자열 입력하기(1) - Scanner

보충수업 1-2 : 자바(java)에서 키보드로 숫자와 문자열 입력하기(2)

 

최대, 최소값은 알겠는데 중앙값을 알고 싶으면 어떡하나요?

보충수업 1-4 : 세 값의 대소관계와 중앙값 (연습문제 Q4~Q5)

 

 

연습문제 Q1. 

import java.util.Scanner; //Scanner 클래스를 이용하기위해 import해야한다.

public class practice {
	
	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) {
		Scanner scan = new Scanner(System.in);
		
		System.out.println("input 4 integers");
		int a = scan.nextInt();
		int b = scan.nextInt();
		int c = scan.nextInt();
		int d = scan.nextInt();
		
		System.out.println("max is "+max4(a, b, c, d));
		
	}
}

연습문제 Q2. 

import java.util.Scanner;

public class practice {
	
	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) {
		Scanner scan = new Scanner(System.in);
		
		System.out.println("input 3 integers");
		int a = scan.nextInt();
		int b = scan.nextInt();
		int c = scan.nextInt();

		System.out.println("min is "+min3(a, b, c));
		
	}
}

연습문제 Q3. 

import java.util.Scanner;

public class practice {
	
	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) {
		Scanner scan = new Scanner(System.in);
		
		System.out.println("input 4 integers");
		int a = scan.nextInt();
		int b = scan.nextInt();
		int c = scan.nextInt();
		int d = scan.nextInt();

		System.out.println("min is "+min4(a, b, c, d));
		
	}
}

 

 

 

 

 

 

※ 코드는 직접 작성한 것이므로 최선이 아닐 수 있습니다. 댓글로 알려주시면 감사하겠습니다.

※ 본문은 [ Do it! 자료구조와 함께 배우는 알고리즘 입문 - 자바편 ] 을 보고 다시 정리한 것입니다. 저작권 문제시 글을 내립니다.

+ Recent posts