인프런 커뮤니티 질문&답변

ㅇㄷㅇ님의 프로필 이미지
ㅇㄷㅇ

작성한 질문수

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

2-11 임시반장 정하기 문제 해결 도와주세요

해결된 질문

작성

·

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

ㅇㄷㅇ님의 프로필 이미지
ㅇㄷㅇ
질문자

와.. 잘 짯다고 생각했던 논리도 허점투성이었네요 감사합니다 ㅠㅠ 선생님 아니었으면 절대 알지 못했을 거 같습니다!

ㅇㄷㅇ님의 프로필 이미지
ㅇㄷㅇ

작성한 질문수

질문하기