문제
https://www.acmicpc.net/problem/2566
9 * 9의 행렬에서 최댓값과 최댓값의 위치 구하기
최댓값이 2개 이상이면 그 중 한 곳을 출력한다.
풀이
최댓값의 위치만 알면 되므로 int[9][9]를 사용하지 않고 이중 for문의 i, j값을 이용하여 행, 열을 구하였다.
br.readLine()으로 한 줄 읽고 StringTokenizer로 값을 하나씩 가져온다.
prev은 이전 값, now는 현재 값인데 둘을 비교하여 now가 더 크면 prev에 now를 집어넣는다.
그렇게 더 큰 값을 만날 때마다 prev를 업데이트해서 비교가 다 끝나면 prev에는 최댓값이 들어가있게 된다.
i=0 && j=0인 경우 아직 비교 대상이 없으므로 prev에 1행 1열 값을 대입하고 비교 동작을 스킵한다.
prev를 업데이트할 때마다 n, m에 업데이트된 위치(행, 열)을 대입한다.
i, j는 0부터 시작하는데 문제에서 0행, 0열이 아니라 1행, 1열부터 세므로 i+1, j+1을 대입해야 한다.
n, m의 초기값은 1, 1이어야 한다.
1행 1열에 있는 값이 최댓값이면 n, m, prev 모든 값이 업데이트되지 않았을 것이므로 초기값 1, 1이 출력되어야한다.
코드
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int n = 1;
int m = 1;
int prev = 0;
int now;
for(int i=0; i<9; i++) {
st = new StringTokenizer(br.readLine());
for(int j=0; j<9; j++) {
if(i==0 && j==0) {
prev = Integer.parseInt(st.nextToken());
continue;
}else {
now = Integer.parseInt(st.nextToken());
}
if (prev < now){
prev = now;
n = i+1;
m = j+1;
}
}
}
bw.write(prev + "\n");
bw.write(n + " " + m);
bw.close();
}
}
'BOJ' 카테고리의 다른 글
[백준 2745번/JAVA] 진법 변환 (0) | 2024.03.14 |
---|---|
[백준 2563번/JAVA] 색종이 | 이차원 배열 (0) | 2024.03.14 |
[백준 10798/JAVA] 세로읽기 (0) | 2024.03.14 |
[백준 2738번/JAVA] 행렬 덧셈 (0) | 2024.03.13 |
[백준 25206번/JAVA] 너의 학점은 (0) | 2024.03.13 |