문제 https://www.acmicpc.net/problem/2566
2566번: 최댓값
첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 위치한 행 번호와 열 번호를 빈칸을 사이에 두고 차례로 출력한다. 최댓값이 두 개 이상인 경우 그 중 한 곳의 위치를 출력한다.
www.acmicpc.net
오늘은
백준 사이트 7단계 '2차원 배열 > 2566번 최댓값 '을 풀어보자!
문제를 확인해 보자!
와... 매번 느끼는 거지만 문제를 볼 때마다
숨이 턱 하고 막히는... 나만 느끼는 건 아닐 거라는...
우선!
1줄(0번째 인덱스)부터 9줄(8번째 인덱스) 행과 열 둘다 동일하게 만들어주자!!
import java.util.Scanner;
public class MaximumValue_2566 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int arr[][] = new int[9][9];
for (int i = 0; i < 9; i++) { // 0 ~ 8
for (int j = 0; j < 9; j++) { // 0 ~ 8
arr[i][j] = sc.nextInt();
}
}
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
System.out.print(arr[i][j]+" ");
if(j == 8){
System.out.println();
}
}
}
}
}
행렬이 잘 나오는지 확인해 보자!
오! 잘 나오는 거 같은데?
이젠 저 행렬 값들 중 1. 최댓값이 무엇인지?
2. 큰 최댓값의 위치(행과 열)를 출력해 주자!
출력 시 표현할 최댓값을 저장할 변수와
최댓값의 행(row)과 열(column)을 저장할 변수를 아래처럼 선언해 주자!
int maxVal = 0; // 최댓값
int rw = 0; // 행
int cl = 0; // 열
문제가 요구하는
출력값을 뽑기 위한
마지막 조건을 추가하자!
예를 들어 설명하자면
maxVal 초기값인 0보다 3 (arr [0][0]) 이 크니깐
maxVal 변수에 3을 넣어주고,
rw(행) 변수에는 i+1인 1을 넣고,
cl(열) 변수에는 j+1인 1을 넣어주자..
위와 다르게 하면
for문의 초기치 i, j 값을 1로 조건식 i <= 9, j <=9 반복 수행으로 바꾸면
maxVal 은 동일하게 두고,
이미 초기치를 1로 잡아서i+1, j+1을 하지 않아도 된다!
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
if (maxVal < arr[i][j]) {
maxVal = arr[i][j];
rw = i + 1;
cl = j + 1;
}
}
}
이제 다 합치자!!!
Scanner
import java.util.Scanner;
public class MaximumValue_2566 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int arr[][] = new int[9][9];
int maxVal = 0; // 최댓값
int rw = 0; // 행
int cl = 0; // 열
for (int i = 0; i < 9; i++) { // 0 ~ 8
for (int j = 0; j < 9; j++) { // 0 ~ 8
arr[i][j] = sc.nextInt();
}
}
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
if (maxVal < arr[i][j]) {
maxVal = arr[i][j];
rw = i + 1;
cl = j + 1;
}
}
}
System.out.println(maxVal);
System.out.print(rw+" "+cl);
}
}
응?...?
왜 이러는 걸까...
찾았다... 행과 열의 초기값을 0으로 해놨으니깐...
if(maxVal < arr [i][j]) 조건식이 행렬 끝날 때까지 진입하지 않을 경우
초기값 그대로 출력될 수 있는걸....(충격)
int maxVal = 0; // 최댓값
int rw = 1; // 행
int cl = 1; // 열
그래서
다시 코드를 바꾸면
import java.util.Scanner;
public class MaximumValue_2566 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int arr[][] = new int[9][9];
int maxVal = 0; // 최댓값
int rw = 1; // 행
int cl = 1; // 열
for (int i = 0; i < 9; i++) { // 0 ~ 8
for (int j = 0; j < 9; j++) { // 0 ~ 8
arr[i][j] = sc.nextInt();
}
}
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
if (maxVal < arr[i][j]) {
maxVal = arr[i][j];
rw = i + 1;
cl = j + 1;
}
}
}
System.out.println(maxVal);
System.out.println(rw+" "+cl);
}
}
성공!!!
BufferedReader + StringTokenizer
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class MaximumValue_2566 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int arr[][] = new int[9][9];
int maxVal = 0; // 최댓값
int rw = 1; // 행
int cl = 1; // 열
for (int i = 0; i < 9; i++) { // 0 ~ 8
st=new StringTokenizer(br.readLine());
for (int j = 0; j < 9; j++) { // 0 ~ 8
arr[i][j] = Integer.parseInt(st.nextToken());
}
}
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
if (maxVal < arr[i][j]) {
maxVal = arr[i][j];
rw = i + 1;
cl = j + 1;
}
}
}
System.out.println(maxVal);
System.out.println(rw+" "+cl);
}
}
두근두근..
성공이다... 메모리도 시간도 줄었다!
계속하다 보면 실력이 늘 거야!! 파이팅...
'java' 카테고리의 다른 글
백준 10798번 문제 세로읽기(Java_자바) (0) | 2024.03.06 |
---|---|
백준 11720번 숫자의 합(Java_자바) (0) | 2024.03.04 |
백준 2738번 문제 행렬 덧셈 (Java_자바) (0) | 2024.03.03 |
(java) - 특정 문자 빼고 배열에 담아서 순서대로 SELECT(Boolean) (0) | 2021.11.23 |
JSP 세션 ID 와 세션 유지시간 을 출력해보자! (0) | 2020.08.27 |