https://www.acmicpc.net/problem/10818
문제 설명 :
N개의 정수를 입력받고, 입력받은 정수의 최대, 최소 값을 구해라
문제를 확인해보면 우선 첫 줄에는 정수 N개를 입력받아야 하고, 그 다음 자신이 입력하고자 하는 정수를 아래와 같이 입력해야 한다.
내 생각 :
항상 Scanner를 사용해서 문제를 풀다 BufferedReader를 알게 되고 후자의 방식을 사용하게 되었다.
문제를 확인하고 입력과 출력을 확인한 후
어떻게 최대, 최소값을 구해야할까? 라는 생각이 들었고, Java의 Math 패키지의 max와 min 메소드가 생각이 났다.
위와 같은 방법을 사용하려고 한다면 배열을 만들고, 반복문을 이용해 우리가 원하는 값을 찾을 것이다.
불필요한 반복문과 배열을 선언하고 사용해야해서 추가적으로 메모리를 사용해야하기에 조건문을 사용해 문제를 해결하려고 접근했다.
내가 작성한 코드는 다음과 같다.
10818 번
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int i = Integer.parseInt(br.readLine());
int max=-1000001;
int min=1000001;
StringTokenizer st = new StringTokenizer(br.readLine()," ");
while(st.hasMoreTokens()){
int num = Integer.parseInt(st.nextToken());
if(num>max){
max=num;
}
if(num<min){
min=num;
}
}
System.out.println(min+ " "+max);
N개를 입력받기 위한 i와 max값을 -1,000,001으로, min 값을 1,000,001으로준 이유는 문제에서
"모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다. " 라는 조건을 주었는데, 입력된 값이 범위를 넘을 일이 없기에 값을 이렇게 설정했다. 그리고 이 문제에서 처음으로 hasMoreTokens()를 사용해보았다. 반복문의 조건부에 특정 변수의 값을 이용해 while문 루프를 돌릴 수 있지만. 토큰들을 " " 로 구분했기에 그 토큰의 개수만큼 루프를 돌 수 있도록 도와준다.
while문 루프를 살펴보면 토큰을 공백을 통해 구분하게 되고, 조건문을 이용해 max값과 min 값을 구하고 StringToken 객체에서 읽어드릴 토큰이 없을땐 hasMoreTokens()가 false를 반환하기에 루프가 종료된다 (읽어드릴 토큰이 있으면 true)
그리고 마지막으로 min과 max를 출력하고 끝내게 된다.
'알고리즘 및 자료구조 > 백준(BackJoon)' 카테고리의 다른 글
백준 - 3052번 (0) | 2022.08.08 |
---|---|
백준 - 1546번 (0) | 2022.08.07 |
백준 - 2577번 (0) | 2022.08.05 |
백준 -2562번 (0) | 2022.08.05 |
백준 2588번 - 곱셈 (Scanner와 BufferedReader) (0) | 2022.07.27 |