문제 해설
틀린코드
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));
StringTokenizer token;
StringBuilder sb = new StringBuilder();
int max = 0; //최댓값을 저장하는 변수
for(int i = 1; i <= 9; i++){
token = new StringTokenizer(br.readLine());
for(int j = 1; j <= 9; j++){
int compare = Integer.parseInt(token.nextToken());
if(max < compare) { //생각 해보니 배열에 저장할 필요가 없음X
// 최댓값과 그 인덱스만 알면되기 때문
max = compare;
sb.setLength(0); //초기화 //기존의 값은 필요없기 때문
sb.append(max + "\n").append(i +" " +j);
}
}
}
br.close();
System.out.println(sb);
}
}
그래서, 나는 이 문제가 2차원 배열 문제이기는 하지만 최댓값만 출력하면 되는 거면 굳이(?) 모든 값들을 2차원 배열에 저장할 필요가 있는건가?
-> 메모리를 조금이라도 아끼자...! 라는 마음으로 2차원 배열을 사용하지 않았다.
-> 위의 코드를 작성해 콘솔에 값을 띄워봤더니 어? 예시랑 출력값이 같네??
-> 이때까지만 해도 내가 쓴 풀이 방식이 맞는 것 같았다.
-> 이 실패하였습니다. 를 마주하기 전에는 말이다...
이 포스트를 하고 있는 이 와중에도 위의 코드가 왜 안되는지는 모르겠지만, 2차원 배열의 문제이니까 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));
StringTokenizer token;
int arrays[][] = new int[9][9];
for(int i = 0; i < 9; i++){
token = new StringTokenizer(br.readLine());
for(int j = 0; j < 9; j++){
arrays[i][j] = Integer.parseInt(token.nextToken());
}
}
br.close();
int max = 0; //최댓값을 저장하는 변수
int row = 0; //최댓값의 행을 저장하는 변수
int col = 0; //최댓값의 열 인덱스를 저장하는 변수
for(int i = 0; i < 9; i++){
for(int j = 0; j < 9; j++){
if(max < arrays[i][j]){
max = arrays[i][j];
row = i;
col = j;
}
}
}
System.out.println(max + "\n" + (row+1) + " " + (col+1) + " ");
}
}
콘솔 화면
결과
틀린 이유를 알고 싶어서 기준 틀렸던 코드에 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));
StringTokenizer token;
StringBuilder sb = new StringBuilder();
int arrays[][] = new int[9][9];
int max = 0; //최댓값을 저장하는 변수
for(int i = 0; i < 9; i++){
token = new StringTokenizer(br.readLine());
for(int j = 0; j < 9; j++){
int compare = Integer.parseInt(token.nextToken());
arrays[i][j] = compare;
if(max < compare) {
max = compare;
sb.setLength(0); //초기화 //기존의 값은 필요없기 때문
sb.append(max + "\n").append((i+1) +" " +(j+1) + " ");
}
}
}
br.close();
System.out.println(sb);
}
}
또 또 틀린 코드
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));
StringTokenizer token;
StringBuilder sb = new StringBuilder();
int arrays[][] = new int[9][9];
for(int i = 0; i < 9; i++){
token = new StringTokenizer(br.readLine());
for(int j = 0; j < 9; j++){
arrays[i][j] = Integer.parseInt(token.nextToken());
}
}
int max = 0; //최댓값을 저장하는 변수
for(int i = 0; i < 9; i++){
for(int j = 0; j < 9; j++){
if(max < arrays[i][j]){
max = arrays[i][j];
sb.delete(0, sb.length());
sb.append(max + "\n");
sb.append((i+1) + " ");
sb.append((j+1));
}
}
}
br.close();
System.out.println(sb);
}
}
-> 조금씩 고쳐보면서 다 확인 해봤는데 계속 틀렸다고 나온다.
-> 콘솔 값을 다르게 줬을때 문제가 되거나 그렇지도 않다..
결과
느낀점
if(max < compare)
부분에서
if(max <= compare)
를 추가해주시면 맞는 답으로 나옵니다.