나 JAVA 봐라

[백준] 1268번 임시 반장 정하기 본문

코딩테스트/구현

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

cool_code 2024. 4. 8. 18:56

초반에는 입력값을 받을 때, ArrayList<Interger> arr[] = new ArrayList[10]; 과 같은 형식으로 받아서 temp[i]의 j에 해당하는 학생의 정보를 담으려고 했다. 

근데 ArrayList와 배열을 함께 쓰는 방식이 익숙하지가 않고 아무리 봐도 적응되지 않아서 2차원 배열 + 3중 for문 방식으로 문제를 풀었다. 

 

접근 방법

  • 입력값은 그대로 input[N][5]의 2차원 배열에 넣기
  • 배열을 학생 기준으로 순회하며 겹치는 횟수 count 하기
    • 순회하기 위해 3중 for문이 사용된다.
      • 1. 각각 i번째 학생 순회 (비교의 기준)
      • 2. 함께 비교할 j번째 학생 : i==j 라면 continue; (-> 동일인물을 비교하면 안되기 때문)
      • 3. i,j의 k학년 비교 : 두 학생이 한 번 같은 반 되었다면, 이 후에는 비교할 필요 없기에 break; 하여 반복문 탈출
  • 위와 같은 반복문을 통해 같은 반된 횟수의 최댓값과 해당 학생 번호를 구한 후 출력한다.
package yejin.song;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class BOJ_임시반장 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int N = Integer.parseInt(st.nextToken()); // 학생 수
        int input[][] = new int[N][5]; // [i][j] = i학생의 j학년 때의 반

        for (int i = 0; i< N; i++){
            st = new StringTokenizer(br.readLine());
            for (int j = 0; j< 5; j++){
                input[i][j] = Integer.parseInt(st.nextToken());
            }
        }

        int max = 0;
        int student_num = 0;

        for (int i = 0; i < N; i++){ // i번 학생에 대한 같은 반 횟수 count
            // 안겹치게 하려면 학생 별로 쭉 비교하면서 cnt ++ 해줘야함 (중복 제거)
            int cnt = 0; // 겹치는 횟수

            for (int j = 0; j< N; j++){ // j학생 접근
                if (i==j) continue; // 자기 자신을 비교 x
                for (int k = 0; k < 5; k++){ // k학년 접근
                    if (input[i][k] == input[j][k]) { // 반이 같다면
                        cnt++;
                        break; //중복 카운트 안되기에 j학생과의 비교 종료
                    }
                }
            }

            if (max < cnt){
                max = cnt;
                student_num = i; // 최종 출력 시 +1 해야함
            }
        }

        System.out.println(student_num+1);
    }
}