문제
N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.
출력
첫째 줄에 주어진 정수 N개의 최솟값과 최댓값을 공백으로 구분해 출력한다.
예제 입력
5
20 10 35 30 7
예제 출력
7 35
출처
제출
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.util.StringTokenizer;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int count = Integer.parseInt(br.readLine());
StringTokenizer num = new StringTokenizer(br.readLine(), " ");
int tmp = Integer.parseInt(num.nextToken());
int max = tmp;
int min = tmp;
while(num.hasMoreTokens()) {
tmp = Integer.parseInt(num.nextToken());
if(tmp > max){
max = tmp;
}else if(tmp < min){
min = tmp;
}
}
System.out.print(min+" "+max);
}
}
풀이
int count = Integer.parseInt(br.readLine());
입력받는 첫번째 줄로, 두번째 입력받을 숫자들의 갯수를 의미.
첫번째로 입력받기 때문에 br.readLine()으로 해당 값을 받아준다 (사실 쓰이진 않지만 받지 않으면 두번째 값을 못받으니까..?)
int tmp = Integer.parseInt(num.nextToken());
두번째 입력받은 값을 공백(" ")을 기준으로 자른 token중에서 첫번째 값.
(tmp 자체는 비교를 위해 임시적으로 넣어두는 변수이다. 입력받은 두번째 줄의 값들을 하나씩 대입하여 비교하는 용도)
while(num.hasMoreTokens()) {
tmp = Integer.parseInt(num.nextToken());
if(tmp > max){
max = tmp;
}else if(tmp < min){
min = tmp;
}
}
hasMoreTokens() : StringTokenizer 클래스 객체에서 다음에 읽어 들일 token이 있으면 true, 없으면 false를 반환
즉, while(hasMoreTokens())은 StringTokenizer객체에 다음 토큰이 없을 때까지 while문 안의 코드를 반복한다.
if문에서는 현재 토큰(tmp)를 max, min 변수와 비교하여 크면 max변수로 현재 토큰(tmp)값을 대입하고, 작으면 min변수로 대입한다.
결과
728x90
'코딩 테스트 > 백준' 카테고리의 다른 글
[백준2675/JAVA] 문자열 반복 (0) | 2021.07.09 |
---|---|
[백준2577/JAVA] 숫자의 개수 (0) | 2021.07.08 |
[백준2526/JAVA] 최댓값 (0) | 2021.07.05 |
[백준10871/JAVA] X보다 작은 수 (0) | 2021.07.05 |
[백준2475/JAVA] 검증수 (0) | 2021.06.30 |