현재 문제에서는 자연수를 총 9줄에 나워서 입력하여, 최대값과 최대값의 n번째 자리를 출력하는 코드를 물어보고 있다. 처음에는 단순히 아래와 같이 코드를 구성하였다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[] A = new int[9];
int max = 0;
for (int i = 0; i < A.length; i++) {
StringTokenizer str = new StringTokenizer(br.readLine());
A[i] = Integer.parseInt(str.nextToken());
if (max < A[i]) {
max = A[i];
}
if (max == A[i]) {
System.out.println(max);
System.out.println(i + 1);
}
}
}
}
위의 코드를 실행할 시 한가지 문제가 발생한다.
3 // 입력값
3
1
29 // 입력값
29
2
같은 반복문에다 묶어두다 보니 배열을 하나하나 입력할때마다 현재 배열의 최대값과 자릿수를 계속해서 출력하는 문제가 발생하는 것이다.
그리하여 아래와 같이 반복문을 따로 분리해주어 문제를 해결하였다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[] A = new int[9];
int max = 0;
for (int i = 0; i < A.length; i++) {
StringTokenizer str = new StringTokenizer(br.readLine());
A[i] = Integer.parseInt(str.nextToken());
if (max < A[i]) {
max = A[i];
}
}
for (int i = 0; i < A.length; i++) {
if (max == A[i]) {
System.out.println(max);
System.out.println(i + 1);
}
}
}
}
3
29
38
12
57
74
40
85
61
85 // 결과값
8 // 결과값
아무래도 max값 뿐만 아니라 자릿수(i)의 값도 같이 출력해야 하다보니 처음에는 위와 같이 문제를 해결하였다.
하지만 생각해보니 i+1
를 따로 int형 변수로 지정하여 출력한다면 굳이 반복문을 2번 사용하지 않아도 결과값을 낼 수 있을것 같아 아래와 같이 한번 더 코드를 축소시켜보았다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[] A = new int[9];
int max = 0;
int maxno = 0;
for (int i = 0; i < A.length; i++) {
StringTokenizer str = new StringTokenizer(br.readLine());
A[i] = Integer.parseInt(str.nextToken());
if (max < A[i]) {
max = A[i];
}
if (max == A[i]) {
maxnum = i+1;
}
}
System.out.println(max);
System.out.println(maxno);
}
}