알고리즘

[백준, 자바, 1268번] 임시 반장 정하기

hminor 2024. 11. 27. 15:43
반응형

풀이

  • 오늘도 깨달았다...
  • 문제를 확실히 읽지 않는자
  • 너는 그냥 틀려라!!!
  • 처음에는 단순히 같은 반이었던 학생을 카운팅하는 것으로
  • 중복해도 계속 카운팅해서 제출했다가 틀림.
  • 이후 다시 확인해보니 중복을 제거 후 카운팅하는 것으로
  • 어떻게 해결할지 고민하다가 그냥
  • 3차원 배열을 사용하여 해결하기로 함.
  • 이후에 제출했는데 77%에서 틀림.
  • 그래서 다시 확인해보니 같은 반이 된 적이 없는 경우에도
  • 초기값으로 인해 존재하지 않는 0번 학생이 출력되고 있다는 것을
  • 확인하여 변경 후 제출.
  • 결론.
    • 문제를 똑바로 읽자.

 

import java.io.*;
import java.util.HashSet;
import java.util.Set;
import java.util.StringTokenizer;

public class _1268 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        int N = Integer.parseInt(br.readLine());
        int[][] li = new int[N][5];
        int[][][] check = new int[5][10][N];

        for (int i=0; i<N; i++) {
            st = new StringTokenizer(br.readLine());
            for (int j=0; j<5; j++) {
                int num = Integer.parseInt(st.nextToken());
                li[i][j]=num;
                check[j][li[i][j]][i]++;
            }
        }
        int[] result = {-1,-1};
        for (int i=0; i<N; i++) {
            Set<Integer> s_li = new HashSet<>();
            for (int j=0; j<5; j++) {
                for (int k=0; k<N; k++) {
                    if (check[j][li[i][j]][k]!=0 && k!=i) s_li.add(k);
                }
            }
            if (s_li.size()>result[1]) {
                result[0]=i+1;
                result[1]=s_li.size();
            }
        }
        System.out.println(result[0]);
    }
}