IT/알고리즘|자료구조

자료구조와 함께 배우는 알고리즘 입문 [자바편] : 최대값 구하기

_KH_ 2025. 1. 6. 01:39

알고리즘이란? 

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

1. 세 값의 최댓값 구하기

 

[책에 나온 코드]

public class BookEx {

	public static void main(String[] args) {
		
		Scanner stdIn = new Scanner(System.in);
		
		System.out.println("세 정수의 최댓값을 구합니다.");
		System.out.print("a의 값 : "); int a = stdIn.nextInt();
		System.out.print("b의 값 : "); int b = stdIn.nextInt();
		System.out.print("c의 값 : "); int c = stdIn.nextInt();
		
		int max = a;
		if(b > max) max = b;
		if(c > max) max = c;
		
		System.out.println("최댓값은 " + max + " 입니다.");
	}

}

 

실행결과

 

 

[내가 짠 코드]

1) 한글코딩

		/* 스캐너 함수 사용
		 * 세 정수의 최댓값을 구하니 입력해달라는 문구 출력
		 * 스캐너로 정수 a 입력 받기 
		 * 스캐너로 정수 b 입력 받기 
		 * 스캐너로 정수 c 입력 받기 
		 * 최댓값을 저장하는 변수 선언
		 * 최댓값 변수에 정수 a 저장
		 * 만약 정수 a보다 정수 b가 크다면 (a<b가 참이라면)
		 * 최댓값 = 정수 b 대입 (max = b)
		 * b가 더 클 때 만약 정수 b보다 정수 c가 크다면 (b<c)
		 * 최댓값 = 정수 c 대입 (max = c)
		 * 만약 정수 b보다 a이 크다면(a<b가 거짓이라면) 
		 * 정수 a과 c 비교
		 * c가 더 크다면
		 * 최댓값 = 정수 c 대입 (max = c)
		 * 아니라면 최댓값은 정수 a 그대로
		 * */

 

2) 코드

	Scanner sc = new Scanner(System.in);
		
		System.out.println("세 정수의 최댓값을 구합니다. ");
		System.out.println("3개의 정수를 입력해주세요 >>");
		
		int a;
		int b;
		int c; // 스코프 문제로 밖에 선언
		
		while(true) { // 올바른 수를 입력할 때까지 계속 입력받음
			a = sc.nextInt();
			b = sc.nextInt();
			c = sc.nextInt(); // 정수 입력
			
		if(a!=b && b!=c && c!=a) {
			break;
		}
		System.out.println("세 정수는 중복될 수 없습니다! 다시 입력해주세요 >>");
	}	
		
		int max = a;
		
		if(a < b) {
			max = b;
			if(b < c ) {
				max = c;
			}
		} else {
			if(a < c) {
				max = c;
			}
		}
		System.out.println("최댓값은 " + max + " 입니다.");
	}
}

 

실행결과

 

세 정수가 중복될 때는 다시 입력받을 수 있도록 while문과 종료조건을 추가하였다.

책에 나온 예제가 UI가 더 좋아보여서 UI를 더 깔끔하고 보기 좋게 수정하면 좋을 것 같다.

또, 이미 접한 예제라서 술술 쓸 수 있었는데 짜본 적 없는 알고리즘을 만나면 헤맬 것 같다.. 열심히 알고리즘 연습하자!

 

[최댓값을 구하는 과정]

1. max에 a값을 넣는다.

2. a값이 b값보다 작을 경우, b를 max에 넣고 b와 c를 또 비교해서, c가 더 크면 c를 max에 넣는다.

(a<b일 때, max= b<c? c : b)

3. a값이 b값보다 클 경우, a와 c를 비교해서 c가 더 클 경우 max에 c를 넣는다. 

(a>b일 때, max = a<c?  c: a)

 

참고로, 최댓값을 여러 번 반복하여 구할 때는 이를 메서드로 만들어서 처리하도록 하자!

 

다음 포스팅은 중앙값 구하기가 될 것 같다. 최대값/최소값은 익숙하지만 중앙값은 그게 아니라서 어떻게 하면 중앙값을 구할 수 있을지 책을 보기 전에 알고리즘을 먼저 생각해보려고 한다.