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

안지현·2024년 3월 31일
0

백준

목록 보기
1/3

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

전체 소스 코드

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(bf.readLine()); //학생 수 입력 받음
        int[] result = new int[T]; //각 학생마다 같은 반이었던 학생 수를 입력할 array
        boolean[][] check = new boolean[T][T]; // 같은 반이 두 번 이상인 학생 쌍 체크
        int[][] arr = new int[T][5]; // 각 학생이 학년별로 몇 반이었는지 나타낼 array

		// 각 학생이 학년별로 몇 반이었는지 array에 담음
        for(int i = 0; i < T; i++){
            StringTokenizer st = new StringTokenizer(bf.readLine());
            for(int j = 0; j < 5; j++) {
                arr[i][j] = Integer.parseInt(st.nextToken());
            }
        }

		// 각 학생이 학년별로 같은 반인 친구가 있었는지 확인
        for(int i = 0; i < 5; i++){ // 학년별
            for(int j = 0; j < T; j++){ // 학생별
                for(int k = 0; k < T; k++){
                    if(i == k) continue;
                    if (arr[j][i] == arr[k][i]) {
                    	// 이미 같은 반을 한 적 있는지 확인
                        if(check[j][k]){
                            continue;
                        } else {
                            result[j]++;
                            result[k]++;
                            check[j][k] = true;
                        }
                    }
                }
            }
        }
		
        //같은 반이었던 학생 수가 가장 많은 학생 뽑기
        int max = 0;
        int index = 0;
        for(int i = 0; i < T; i++){
            if(result[i] > max) {
                max = result[i];
                index = i;
            }
        }
        System.out.println(index+1);
    }
}

BufferedReader

1. Scanner
Scanner는 띄어쓰기와 개행문자를 경계로 값을 인식하기 때문에 따로 가공할 필요가 없어 편리하다. 하지만 BufferedReader는 입력 받은 데이터가 String 으로 고정되기 때문에 데이터를 원하는 타입으로 가공하는 작업이 필요하다.
Scanner는 지원하는 메서드가 많아 사용하기 편리하지만 버퍼 사이즈가 1024 char 이기 때문에 많은 입력을 필요로 하는 경우에는 성능상 좋지 못하다.
2. BufferedReader
BufferedReader는 개행문자만 경계로 인식하고 입력받은 데이터가 String으로 고정된다. 그렇기에 데이터를 따로 가공해야 하지만 Scanner보다 속도가 빠르다. 버퍼 사이즈가 8192 char 이기 때문에 입력 받을 값이 많으면 BufferedReader가 유리하다.
또한 BufferedReader는 동기화 되기 때문에 멀티 쓰레드 환경에서 안전하고, Scanner는 동기화 되지 않아서 멀티 쓰레드 환경에서 안전하지 못하다.

사용 방법

 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 선언
 String str = br.readLine();
 int num = Integer.parseInt(br.readLine());

0개의 댓글