🔗 백준 1268 - 임시 반장 정하기
문제

알고리즘 분류
풀이
1. 입력
- student_classes[i][j]는 i번 학생의 j학년 때 반을 의미
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
int[][] student_classes = new int[num][5];
for(int i = 0; i < num; i++){
for(int j = 0; j <5 ; j++){
student_classes[i][j] = sc.nextInt();
}
}
2. 같은 반 여부 및 중복 확인
- 중복 제거를 위해 Set을 사용
- 각 학생 별 반복 ( i 반복)
- 학생의 각 학년에 대해 ( j 반복)
- 같은 학년( j가 같을 때)의 다른 학생(k 반복, k != i)의 반 확인
-> 따라서 arr[k][j]가 arr[i][j]와 같은 지 확인
- IF - 같으면 set에 해당 학생의 번호(k)를 추가
int max = 0;
int leader = 0;
for(int i = 0; i<num; i++){
Set<Integer> set = new HashSet<>();
for(int j = 0; j<5; j++){
for(int k = 0; k<num; k++){
if(student_classes[i][j] == student_classes[k][j]
&& i!=k){
set.add(k);
}
}
}
if(set.size()>max) {
leader = i;
max = set.size();
}
}
System.out.println(leader + 1);
전체 코드
import java.io.IOException;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class Main {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
int[][] student_classes = new int[num][5];
for(int i = 0; i < num; i++){
for(int j = 0; j <5 ; j++){
student_classes[i][j] = sc.nextInt();
}
}
int max = 0;
int leader = 0;
for(int i = 0; i<num; i++){
Set<Integer> set = new HashSet<>();
for(int j = 0; j<5; j++){
for(int k = 0; k<num; k++){
if(student_classes[i][j] == student_classes[k][j]
&& i!=k){
set.add(k);
}
}
}
if(set.size()>max) {
leader = i;
max = set.size();
}
}
System.out.println(leader + 1);
}
}