백준 10818 최소, 최대

coha96 ㅣ 2023. 3. 18. 05:15

문제

https://www.acmicpc.net/problem/10818

 

10818번: 최소, 최대

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

www.acmicpc.net

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


입력

첫째 줄에 정수의 개수 (1 ≤ N ≤ 1,000,000)이 주어진다. 

둘째 줄에는 N개의 정수를 공백으로 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.


출력

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



작성 코드

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

public class MinMax {
    public static void main(String[] args) throws IOException {

        // BufferedReader 클래스를 사용하여 입력
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        int Min = 1000000;
        int Max = -1000000;

        StringTokenizer st = new StringTokenizer(br.readLine()); // 공백 단위 데이터 가공

        for (int i = 0; i < N; i++) {
            int input = Integer.parseInt(st.nextToken()); // 호출
            Max = Math.max(Max, input); // 두 인자 값 중 큰 값을 리턴
            Min = Math.min(Min, input); // 두 인자 값 중 작은 값을 리턴
        }
        System.out.print(Min + " " + Max);
        }
    }

 

BufferedReader

: Scanner와 유사

 

Bufferedwriter:

System.out.println();과 유사

 

- 속도 측면에서 훨씬 빠르기 때문에 많은 양의 데이터를 처리할 때 유리하다.

- 입력된 데이터가 바로 전달되지 않고 버퍼를 거쳐 전달되기 때문에 데이터 처리 효율성이 높다.

- 하지만 BufferedReader은 Enter만 경계로 인식하고 받은 데이터가 String으로 고정되기 때문에 입력받은 데이터 가공이 필요한 경우가 많다.

import java.io.BufferedReader;
import java.io.InputStreamReader;

// BufferedReader 클래스를 사용하여 입력
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine(); //String
int i = Integer.parseInt(br.readLine()); //Int

입력은 readLine(); 메서드를 활용한다.

※ 주의해야할 점

1. readLine()시 리턴 값을 String으로 고정되기 때문에 String이 아닌 다른 타입 입력을 받으려면 형 변환을 꼭 해주어야 한다.

2. 예외처리 필수 - readLine을 할 때마다 try ~ catch문을 활용하여 예외처리를 해주어도 되지만 대게 throw IOException을 통하여 작업한다.

import java.io.IOException;
    public static void main(String[] args) throws IOException {
    
    }

 

Read한 데이터는 Line 단위로만 나누어지기 때문에 공백 단위로 데이터를 가공하려면 따로 작업을 해주어야 한다.

방법1. StringTokenizer에 nextToken() 함수를 쓰면 readLine()을 통해 입력 받은 값을 공백 단위로 구분하여 순서대로 호출할 수 있다.

방법2. String.split() 함수를 활용하여 배열에 공백 단위로 끊어서 데이터를 넣고 사용하는 방식이다.

StringTokenizer st = new StringTokenizer(s); //StringTokenizer인자값에 입력 문자열 넣음
int a = Integer.parseInt(st.nextToken()); //첫번째 호출
int b = Integer.parseInt(st.nextToken()); //두번째 호출

String array[] = s.split(" "); //공백마다 데이터 끊어서 배열에 넣음

배열 1Page 노트 정리

'코딩테스트' 카테고리의 다른 글

미완/백준 24174 힙 정렬  (0) 2023.03.21
미완/백준 1158 요세푸스 순열  (0) 2023.03.21
백준 26008 해시 해킹  (0) 2023.03.20
미완/(Queue)백준 1021 회전하는 큐  (0) 2023.03.17
(Stack)백준 25556 포스택  (0) 2023.03.15