임시반장 정하기 문제

출처 : 한국정보올림피아드

import java.util.Scanner;

public class Main {
	
	public int solution(int std, int[][] stdArr) {
		int ans = 0, max = Integer.MIN_VALUE;
		
		int[] score = new int[std+1];
		
		for(int i = 1; i <= std; i++) {
			for(int j = 1; j <= std; j++) {
				for(int k = 1; k <=5; k++) {
					if(stdArr[i][k] == stdArr[j][k]) {
						score[i]++; 
						break;
					}
				}
			}

		}
		
		for(int i = 1; i <= std; i++) {
			if(score[i] > max) { 
				max = score[i];
				ans = i;
			}
		}
		return ans;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Main T = new Main();
		Scanner kb = new Scanner(System.in);
		
		int std = kb.nextInt();
		int[][] stdArr = new int[std+1][6];
		
		for(int i = 1; i <= std; i++) {
			for(int j = 1; j <= 5; j++) {
				stdArr[i][j] = kb.nextInt(); 
			}
		}
		
		System.out.println(T.solution(std, stdArr));		
	}

}

학생/학년 2차원 배열을 입력받고

 

학생 수+1 크기의 score 배열을 만들어 그중 요소의 값이 제일 큰 index번 학생을 출력하면 된다.

 

각 학생(i)들이 * 다른 학생(j)들과 * (1~5)학년일 때(k) 같은 값을 갖는다면

score[i]++

자기 자신과 같은 반일 경우의 예외는 제외하지 않았다. 모든 학생이 동일하게 각 학년에서 자신과 같은 반이기 때문.

'Solved > 코딩테스트' 카테고리의 다른 글

토마토(BFS 활용)  (0) 2023.03.29
후위연산식 문제 (Stack)  (0) 2023.03.18
Least Recently Used  (0) 2023.03.14
쇠막대기 절단 문제 (Stack)  (0) 2023.03.13
크레인 인형뽑기 (Stack)  (0) 2023.03.11