[단계별로 풀어보기] (10818번) 최소, 최대

Jun_Gyu·2023년 3월 2일
0

BackJoon Online Judge

목록 보기
3/18

첫째줄에 수열에 들어갈 정수의 개수, 둘째줄에는 배열 각 자릿수에 들어갈 정수들을 입력했다.
입력시 공백을 분류하여 값이 대입되도록 구분해주도록 하자.

먼저 처음 구성했던 코드이다.

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

public class Main {

	public static void main(String[] args) throws IOException { // 버퍼리더 사용시 반드시 예외처리 필요
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer str = new StringTokenizer(br.readLine(), " "); // 입력받은 값에서 빈칸을 구분함.

		int N = Integer.parseInt(str.nextToken());
		long[] A = new long[N];

		str = new StringTokenizer(br.readLine(), " "); // 새로운 값 입력
		
		for (int i = 0; i < A.length; i++) {
			A[i] = Integer.parseInt(str.nextToken()); // 수열 A에 들어가는 값들
		}

		long max = 0;
		long min = 0;
		for (int i = 0; i < A.length; i++) {
			if (max < A[i]) {
				max = A[i];
			}
		}
		for (int i = 0; i < A.length; i++) {
			if (min > A[i]) {
				min = A[i];
			}
		}
		System.out.println((min) + " " + (max));

	}
}

위의 코드와 같이 구성할 경우 결과값은 이러한 식으로 도출되게 된다.

5 
20 10 35 30 7
0 35 // 결과값

위의 예제를 대입하면 최소값이 0으로 출력되는 문제가 발생한다. 어떤 식으로 해결해야 할까?

문제는 간단하다.
최대,최소값을 출력해주는 min, max값이 각각 0으로 지정되어 있어서 발생한 문제이다.
문제에서 모든정수는-1,000,000 ≤ N ≤ 1,000,000의 범위를 가진다고 하였으니,
이를 통해서 다시 코드를 수정해주었다.
(추가적으로 최대 최소값의 두 반복문도 하나로 합쳐주었다.)

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

public class Main {

	public static void main(String[] args) throws IOException { // 버퍼리더 사용시 반드시 예외처리 필요
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer str = new StringTokenizer(br.readLine(), " "); // 입력받은 값에서 빈칸을 구분함.

		int N = Integer.parseInt(str.nextToken());
		long[] A = new long[N];

		str = new StringTokenizer(br.readLine(), " "); // 새로운 값 입력

		for (int i = 0; i < A.length; i++) {
			A[i] = Integer.parseInt(str.nextToken()); // 수열 A에 들어가는 값들
		}

		long max = -1000000;
		long min = 1000000;
		for (int i = 0; i < A.length; i++) {
			if (max < A[i]) {
				max = A[i];
			}
			if (min > A[i]) {
				min = A[i];
			}
		}
		System.out.println((min) + " " + (max));
	}
}

아래와 같이 정상적으로 출력됨을 확인할 수 있었다.

5
20 10 35 30 7
7 35 // 결과값 출력
profile
시작은 미약하지만, 그 끝은 창대하리라

0개의 댓글