-
카테고리
-
세부 분야
알고리즘 · 자료구조
-
해결 여부
해결됨
2-11 임시반장 정하기 문제 해결 도와주세요
23.05.03 11:01 작성 23.05.03 11:02 수정 조회수 263
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
김태원
지식공유자2023.05.07
안녕하세요^^
아래 입력처럼 모든 학생이 한 번도 서로 같은 반을 한적이 없으면 모든 학생의 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
답변 1