[Algorithm] 임시반장 정하기

19·2022년 11월 8일
0

Algorithm

목록 보기
21/28
post-custom-banner

임시반장 정하기

설명

김갑동 선생님은 올해 6학년 1반 담임을 맡게 되었다.
김갑동 선생님은 우선 임시로 반장을 정하고 학생들이 서로 친숙해진 후에 정식으로 선거를 통해 반장을 선출하려고 한다.
그는 자기반 학생 중에서 1학년부터 5학년까지 지내오면서 한번이라도 같은 반이었던 사람이 가장 많은 학생을 임시 반장으로 정하려 한다.

입력

첫째 줄에는 반의 학생 수를 나타내는 정수가 주어진다. 학생 수는 3 이상 1000 이하이다.
둘째 줄부터는 1번 학생부터 차례대로 각 줄마다 1학년부터 5학년까지 몇 반에 속했었는지를 나타내는 5개의 정수가 빈칸 하나를 사이에 두고 주어진다.
주어지는 정수는 모두 1 이상 9 이하의 정수이다.

출력

첫 줄에 임시 반장으로 정해진 학생의 번호를 출력한다.
단, 임시 반장이 될 수 있는 학생이 여러 명인 경우에는 그 중 가장 작은 번호만 출력한다.

예시 입력 1

5
2 3 1 7 3
4 1 9 6 8
5 5 2 4 4
6 5 2 6 7
8 4 2 2 2

예시 출력 1

4



해결

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

public class Main {
    public int solution(int n, int[][] arr) {
        int answer = 0;
        int max = 0;    // 같은 반 빈도가 가장 많은 학생

        // 배열 순회,
        for(int i=1; i<=n; i++) {
            int count = 0;
            for (int j=1; j<=n; j++) {
                for (int k=1; k<=5; k++) {  // 5학년까지 있기 때문에 상수로 지정함
                    // i번 학생과 가장 많은 빈도로 같은 반이었던 학생 수를 찾는다
                    if (arr[i][k] == arr[j][k]) {
                        count++;
                        // 특정 학생과 같은 반인 경우가 있다면 break
                        // (ex. 1,2학년때 같은 반이라고 count가 2가되면 안되니까)
                        break;
                    }
                }
            }
            if (count > max) {
                max = count;
                answer = i;
            }
        }

        return answer;
    }

    public static void main(String[] args) throws IOException {
        Main T = new Main();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        int[][] numArr = new int[N+1][6];
        for (int i=1; i<=N; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            for (int j=1; st.hasMoreTokens(); j++) {
                numArr[i][j] = Integer.parseInt(st.nextToken());
            }
        }
        System.out.println(T.solution(N, numArr));
    }
}
  • 2차원 배열을 어떻게 순회해서 도출하고자 하는 값을 구할건지에 관한 문제였다
  • i번 학생과 j번 학생의 k학년간 같은 반 횟수를 구하고, 가장 많은 빈도로 같은 반이 된 학생을 구해서 해결했다

어떤 방식으로 구해야하는지가 어려웠다.
다시 풀어보고 익숙해지자

profile
하나씩 차근차근
post-custom-banner

0개의 댓글