[단계별로 풀어보기] 2526번 최댓값 (1차원 배열)

Jun_Gyu·2023년 3월 4일
0

BackJoon Online Judge

목록 보기
4/18


현재 문제에서는 자연수를 총 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);
	}
}
profile
시작은 미약하지만, 그 끝은 창대하리라

0개의 댓글