https://codeup.kr/problem.php?id=1095
출석 번호를 n번 무작위로 불렀을 때, 가장 빠른 번호를 출력해 보자.
입력
번호를 부른 횟수(n, 1 ~ 10000)가 첫 줄에 입력된다.
n개의 랜덤 번호(k, 1 ~ 23)가 두 번째 줄에 공백을 사이에 두고 순서대로 입력된다.
출력
출석을 부른 번호 중에 가장 빠른 번호를 1개만 출력한다.
import java.util.Scanner;
public class Codeup1095 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int size = sc.nextInt();
int[] arr = new int[size];
int index = 0;
for (int i = 0; i < size; i++) {
arr[index++] = sc.nextInt(); // 문제의 핵심
}
int minValue = arr[0]; // 멘토님이 말씀하신 부분
for (int i = 0; i < size; i++) {
if (minValue > arr[i]) minValue = arr[i];
}
System.out.printf("%d", minValue);
}
}
이 문제는 입력되는 값 중에 가장 빠른, 그러니까 가장 작은 수를 출력하는 문제이다. 최대값 최소값 구하기 문제의 이해가 어려워 멘토님께 도움을 청했다.
첫 번째는
int minValue = arr[0];
최소값을 구할 때는 주어진 값 내에서 비교하기 위해 단순히 첫 입력값(배열이면 0번째값)을 주면 된다.
두번째는
if (minValue > arr[i]) minValue = arr[i];
for문 조건식에서 이 비교 과정을 반복한다.
minValue = 20, arr[i] = 15 라고 가정하면 true -> arr[i] = 15;
minValue = 13, arr[i] = 15 라고 가정하면 false -> arr[i] = 15;
비교가 끝나면 결과 값은 최소값으로 정해진다.
조건식의 부호가 바뀌면 최대값을 구할 수 있다.
멘토님의 상세한 답변 덕분에 이해가 쉬웠다.
다시 한번 감사하다고 말씀 드리고 싶다.