💡문제 풀이/백준 - JAVA

최댓값 / 2562

뇌 리셋은 기본이지 2023. 11. 20. 23:09

정보

분류 : 1차원 배열

 

문제

문제링크

 

풀이

  • 풀이 1 ( BufferedReader + BufferedWriter + 배열 ) → 148ms
import java.io.*;

public class Main {
	public static void main(String[] args) throws IOException {
		// InputStream : 자바의 가장 기본이 되는 입력 스트림
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		// OutputStreamWriter : 자바의 가장 기본이 되는 출력 스트림
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int[] arr = new int[9];		// 입력 9개 받는 array
		int max = arr[0];			// max 값을 담을 변수
		int index = 0;				// max 값의 index를 담을 변수
		
		for(int i = 0 ; i < arr.length ; i++) {
			int num = Integer.parseInt(br.readLine());
			arr[i] = num;			// 입력한 숫자를 배열에 담기
			
			if(max < arr[i]) {		// arr[0~8]의 값이 arr[0]보다 크면
				max = arr[i];		// arr[0]의 값을 큰 값으로 대체
				index = i + 1;		// index는 i + 1
			};
		};
		
		br.close();			// 입력 종료
		bw.write(max + "\n" + index);	// 결과 출력
		bw.flush();			// 출력 비우고
		bw.close();			// 출력 종료
	}
}
  • 풀이 2 ( BufferedReader + printf() + 배열사용X ) → 140ms
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
	public static void main(String[] args) throws IOException {
		// InputStream : 자바의 가장 기본이 되는 입력 스트림
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int max = 0;
		int index = 0;
		for(int i = 0 ; i < 9 ; i++) {
			int val = Integer.parseInt(br.readLine());
			
			if(val > max) {
				max = val;
				index = i + 1;
			}
		}
		
		System.out.printf("%d\n%d", max, index);
		
		br.close();
	}
}

풀이 후기

풀이 1은 배열을 사용한 풀이 방법이고 풀이 2는 배열을 쓰지 않은 풀이 방법이다.

 

풀이 1은 배열에 9개의 방을 미리 만들어두고 미리 만들어둔 방에 for문을 이용하여 입력한 값을 각 방에 입력한다. 배열 내에 들어있는 각각의 값과 배열의 0번째 값을 가진 max변수를 if문을 이용하여 비교한다. 비교하며 그에 맞는 max변수의 값을 바꿔치기하면서 그에 대한 index값도 부여된다.

arr = [ 3, 29, 38, 12, 57, 74, 40, 85, 61 ]
i arr[i] max < arr[i] max index = i + 1
0 3 3 < 3
(false)
0 -
1 29 3 < 29
(true)
29 2
2 38 29 < 38
(true)
38 3
3 12 38 < 12
(false)
4 57 38 < 57
(true)
57 5
5 74 57 < 74
(true)
74 6
6 40 74 < 40
(false)
7 85 74 < 85
(true)
85 8
8 61 85 < 61
(false)
최종
max = 85, index = 8

 

풀이 2'서로 다른 9개의 자연수'라는 문구를 통해 굳이 배열을 사용하지 않고 for문 조건식에 i를 8번만 돌릴 수 있도록 조건을 두었다. for문이 8번 돌면서 if문을 통해 val변수와 max변수의 값을 비교하며 값을 바꿔치기하고 index 또한 1을 더하여 배열의 값이 아닌 max변수에 해당되는 자리수를 표현하였다. 풀이 2 같은 경우 배열을 만들 필요가 없어 메모리가 절약 된다.

입력값 : 3, 29, 38, 12, 57, 74, 40, 85, 61
i val val > max max index = i + 1
0 3 3 > 0
(true)
3 1
1 29 29 > 3
(true)
29 2
2 38 38 > 29
(true)
38 3
3 12 12 > 38
(false)
4 57 57 > 38
(true)
57 5
5 74 74 > 57
(true)
74 6
6 40 40 > 74
(false)
7 85 85 > 74
(true)
85 8
8 61 61 > 85
(false)
최종
max = 85, index = 8

reference

https://st-lab.tistory.com/44

'💡문제 풀이 > 백준 - JAVA' 카테고리의 다른 글

최소, 최대 / 10818  (0) 2023.11.20
X보다 작은 수 / 10871  (1) 2023.11.20
개수 세기 / 10807  (0) 2023.11.20
A+B - 4 / 10951  (1) 2023.11.17
A+B - 5 / 10952  (1) 2023.11.17