[Java][백준] #1268 - 임시 반장 정하기

배수연·2024년 2월 19일

algorithm

목록 보기
6/45

🔗 백준 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);
                    }
                }
            }
            // set의 개수(같은 반이었던 학생의 수)가 가장 많은 사람이 leader
            // 1번 학생부터 증가하며 반복하므로,
            // 동일하다면 이미 leader에 저장된 학생이 임시 반장이 됨
            // (문제의 동일한 경우 번호가 작은 학생이 반장이 되는 조건 만족)
            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);
    }
}

0개의 댓글