임시반장 정하기

Seungmin Lim·2022년 2월 7일
0

코딩문제연습

목록 보기
25/63

문제

나의풀이

import java.util.*;

class Main {
	public int solution(int n,int[][] arr) {
			int answer = 0 , max = Integer.MIN_VALUE;
			for(int i=1; i<=n;i++) {
				int count = 0;
				for(int j=1; j<=n; j++) {
					for(int k=1; k<=5; k++) {
						//같은반인적이 있으면 i는 고정. j는 다른 번호 학생
						if(arr[i][k] == arr[j][k]) {
							count++;
							break;
						}
					}
				}
				if(count > max) {
					max = count;
					answer = i;
				}
			}
			return answer;
		}
		    
	public static void main(String[] args) {
		Main T = new Main();
		Scanner kb = new Scanner(System.in);
		int n = kb.nextInt();
		int[][] arr = new int[n+1][6];
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= 5; j++) {
				arr[i][j] = kb.nextInt();
			}
		}
		System.out.println(T.solution(n, arr));
	}
	
}

풀이방법

i는 고정된, 즉, 현재 선택된 학생이 j번호의 학생과 k학년일때 같은반이 된 적이 있는가 탐색했다.

만약 같은반이 된 적이 한번이라도 발견되면 count가 증가되고 그 즉시 k문은 멈추고 다음 번호학생과 비교한다. (학생 수만 비교하기때문에)

한 학생의 비교가 완전 끝나면 count에 몇명의 학생과 같은반이었던적이 있는지가 담기는데,

만약 count가 max보다 크다면 max는 현재 count로 바뀌고 해당 학생의 번호 (i)가 answer값이 된다.

핵심키워드

3중 for문을 통해 2차원 배열의 값을 열끼리 비교, 행끼리 비교 하는 방법을 잘 익혀둬야겠다!

0개의 댓글