[BOJ] 10818 최소, 최대 (JAVA)

yu-jin-song·2021년 4월 8일
0

Algorithm

목록 보기
31/53

✅ 문제

N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오.

✅ 입력

  • 첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다.
  • 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다.
  • 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.

✅ 출력

첫째 줄에 주어진 정수 N개의 최솟값과 최댓값을 공백으로 구분해 출력한다.

✅ 예제 1

▼ 입력

5
20 10 35 30 7

▼ 출력

7 35

풀이

  • BufferedReader.readLine()으로 값을 입력받는다.
  • 최소값과 최대값을 저장할 변수를 선언하고 입력받은 정수 중 첫번째 값으로 초기화한다.
  • for문을 이용하여 두번째 값부터 최소값과 최대값을 비교한다.

💡 방법1 - 배열 사용

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int max, min;	// 최소값 및 최대값
		
		int n = Integer.parseInt(br.readLine());
		int[] arr = new int[n];	// 입력받은 정수의 개수만큼 배열 생성
		
		StringTokenizer st = new StringTokenizer(br.readLine());
		int cnt = st.countTokens();	// 토큰의 갯수 얻어오기
		for(int i=0; i<cnt; i++) {	// 토큰의 갯수만큼 토큰 하나씩 얻어와 배열에 입력
			arr[i] = Integer.parseInt(st.nextToken());
		}
		
		max = min = arr[0];	// 배열의 첫번째 값을 최소값 및 최대값으로 지정
		
		for(int i=1; i<arr.length; i++) {	// 배열의 두번째 값부터 마지막 값까지 비교
			if(arr[i] > max)
				max = arr[i];
			if(arr[i] < min)
				min = arr[i];
		}
		
		System.out.println(min + " " + max);

💡 방법2 - 배열 사용x

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int max, min;	// 최소값 및 최대값
		
		int n = Integer.parseInt(br.readLine());
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		max = min = Integer.parseInt(st.nextToken());	// 첫번째 값을 최소값 및 최대값으로 지정
		
		for(int i=1; i<n; i++) {	// 두번째 값부터 마지막 값까지
			int num = Integer.parseInt(st.nextToken());	// 토큰 꺼내오기
			
			if(num > max)	// 꺼내온 값이 최대값보다 클 경우
				max = num;
			if(num < min)	// 꺼내온 값이 최소값보다 작을 경우
				min = num;
		}
		
		System.out.println(min + " " + max);
	}
}

🧾 코드 실행 결과

근소하지만 차이가 있었다. 본인이 원하는 결과에 맞춰 방법을 택하면 될 것 같다.

| 구분 | 메모리 | 시간 | 코드길이 |
|:----------:|:----------:|:----------:|:----------:|
| 방법1
(배열 O)
| 93368KB | 588ms | 733B |
| 방법2
(배열 X)
| 88880KB | 604ms | 649B |

  • 시간을 줄이고 싶다 → 방법1
  • 메모리 사용량 및 코드 길이를 줄이고 싶다 → 방법2
profile
기쁘게 코딩하고 싶은 백엔드 개발자

0개의 댓글