문제:
정수 N개로 이루어진 수열 A와 정수 X가 주어진다. 이때, A에서 X보다 작은 수를 모두 출력하는 프로그램을 작성하시오.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
//System.out.println("input n:");
int n = s.nextInt();
//System.out.println("input x:");
int x = s.nextInt();
int[] a = new int[n];
for (int i = 0; i < a.length; i++) {
//System.out.println("input a["+i+"]:");
a[i] = s.nextInt();
}
s.close();
for (int i = 0; i < a.length; i++) {
if (a[i] < x) {
System.out.print(a[i] +",");
}
}
}
}
s.close();의 위치가 관련없을꺼 같아서 int x 바로 밑으로 소스를 옮겨봤더니 런타임 에러가 났다.
내가 문제를 이해하는 과정 (뇌 협찬: 민성님)
int[] a = new int[n];
for (int i = 0; i < a.length; i++) {
a[i] = s.nextInt();
1~N까지의 배열이 있다는 뜻이다.
즉 n은 a배열의 마지막 숫자이므로 A배열은 N까지의 숫자가 있다는 뜻이므로 length함수를 사용한다. i는 배열의 숫자로 예를 들어 A가 8까지라고 하면 1,2,3,4,5,6,7,8까지 1씩 증가하므로 i++이다. a배열 칸에 들어가는 숫자는 입력받은 값이므로 .nextInt를 사용한다. 지금까지는 A배열에 숫자를 입력받는 과정이였다.
이제 X보다 작은 값을 출력하는 과정이다.
i는 배열의 번호라고 생각하면 된다.
만약 내가 입력한 값이
10, 5
1, 3, 5, 4, 7, 8, 2, 6, 9, 10 이라고 한다면 a[2]≠2 이다.
a[2]=5, a[3]=4(배열은 0부터 세기때문)이다.
for (int i = 0; i < a.length; i++) {
그래서 i가 0부터 1씩 증가하고 i는 0부터 9까지 1씩증가한다.
if (a[i] < x) {
만약 a[1]<5이면
1이 출력된다.
a[0]=1, a[1]=3, a[2]=5, a[3]=4, a[4]=7, a[5]=8. a[6]=2, a[7]=6, a[8]=9 a[9]=10 a[10=a.length]=출력 X