해결된 질문
작성
·
303
·
수정됨
1
import java.util.Scanner;
//임시반장 정하기
public class Class11 {
public static void main(String[] args) {
Class11 T = new Class11();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt(); // n명의 학생
int[][] arr = new int[n][5]; // n명 학생의 5학년까지
for (int i = 0; i < n; i++)
for (int j = 0; j < 5; j++)
arr[i][j] = kb.nextInt();
System.out.println(T.solution(n, arr));
}
public int solution(int n, int[][] arr) {
int answer = 0;
int max = 0;
for (int i = 0; i < n; i++) { // i학생 인덱스
int[] x = new int[n]; // 같은 반을 했던적이 있는지 담는 배열
for (int j = 0; j < 5; j++) { // 학년 수
for (int k = 0; k < n; k++) { //k학생 인덱스
if (i != k && arr[i][j] == arr[k][j])//i번학생과 k번학생의 학년이 같은지 검사.
x[k] = 1;
}
}
int s = 0;
for (int tmp : x) {
s += tmp;
}
System.out.print(i + 1 + "학생: " + s + " /");
for(int a : x) System.out.print( a + " ");
System.out.println();
if (s > max) {
max = s;
answer = i + 1;
}
}
return answer;
}
}
저는 i번째 학생을 고정해두고 k번 학생이 반복문을 돌면서 j학년을 돌면서
같은 반이었으면 x배열의 인덱스에 표시하도록 했습니다.
그러면 x배열에 각 학생들이 같은 반이었던 학생들이 표시가 되고, 그 수를 합해서 answer로 반환하도록 했는데요.. 정답이 안 나옵니다 ㅠ.. 왜일까요
답변 1
1
안녕하세요^^
아래 입력처럼 모든 학생이 한 번도 서로 같은 반을 한적이 없으면 모든 학생의 s 값은 0입니다. 이럴 경우
if (s > max) 가 한 번도 참이 되는 경우가 없어 answer = 0 그대로 있게 됩니다. 아래 입력의 답은 1인데 위에 코드는 0을 출력하게 됩니다.
9
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9
6 7 8 9 1
7 8 9 1 2
8 9 1 2 3
9 1 2 3 4
와.. 잘 짯다고 생각했던 논리도 허점투성이었네요 감사합니다 ㅠㅠ 선생님 아니었으면 절대 알지 못했을 거 같습니다!