Post

Array_같은반이었던 경험이 제일 많은 학생

✅ 학생들이 1~5학년까지 몇 반이었는지 주어진다. 같은 반이었던 학생이 가장 많았던 학생 번호를 출력한다.

단, 2학년 때 같은반이었고 3학년 때 또 같은 반이었으면 한 번으로 센다.
아래 인풋의 경우 4번 학생이 같은 반이었던 학생 수가 가장 많으므로 4번을 출력한다.
같은 반이었던 학생 수가 가장 많은 학생이 여러명인 경우에는 가장 작은 번호만 출력한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
class Main {

    public int solution(int n, int[][] intArr){
    int answer=0;
    int count= 0;
    int max=0;
    for(int i=0; i<n; i++){
        for(int j=0; j<n; j++){
            for(int k=0; k<5; k++){ //k<5, k는 5보다 클 수 없음
                if(intArr[i][k] == intArr[j][k]) {
                    count++;
                    break; //같은반 한 친구를 또 세면 안되니까 같은반 했어? 그럼 break
                }
            }
        }
        if(count > max) {
            max= count;
            answer=i+1;
        }
        count=0;
    }
    return answer;

}
    public static void main(String[] args) {
        Main T = new Main();
        Scanner sc= new Scanner(System.in);
        int n = sc.nextInt();
        int[][] intArr = new int[n][5];
        for(int i=0; i<n; i++){
            for(int j=0; j<5; j++) {
                intArr[i][j] = sc.nextInt();
            }
        }
        System.out.print(T.solution(n, intArr));
    }
}

//⭐️input:
// 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
//⭐️output:
//4

코딩공책-32 2

🔵 ThingsILearned

✔️ intArr[i][k] == intArr[j][k] 🆚 intArr[i][j] == intArr[k][j]

아래 오답 코드에서 이 코드 때문에 틀렸다고 해도 과언이 아니다.
위 그림에 이렇게 되는 이유를 그려놓았다.

✔️ 같은반이었던 학생을 찾으면 두 번 세면 안되니까 더이상 찾지 않기 => break

1
2
3
4
if(intArr[i][k] == intArr[j][k]) {
    count++;
    break; //같은반 한 친구를 또 세면 안되니까 같은반 했어? 그럼 break
}

✔️ runtimeError났을 때

k<n 이라고 했을 때 runtimeError가 발생했다. 5라고 값을 지정하자 문제가 사라짐.

1
2
3
   for(int i=0; i<n; i++){
        for(int j=0; j<n; j++){
            for(int k=0; k<5; k++)

🔴 오답 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class Main {

    public int solution(int n, int[][] intArr){
    int answer=0;
    int count= 0;
    int max=0;
    for(int i=0; i<n; i++){
        for(int j=0; j<n; j++){
            for(int k=0; k<5; k++){
                if(intArr[i][j] == intArr[k][j]) { //🔴
                    count++;
                    break;
                }
            }
        }
        if(count > max) {
            max= count;
            answer=i+1;
        }
        count=0;
    }
    return answer;

}
    public static void main(String[] args) {
        Main T = new Main();
        Scanner sc= new Scanner(System.in);
        int n = sc.nextInt();
        int[][] intArr = new int[n][5];
        for(int i=0; i<n; i++){
            for(int j=0; j<5; j++) {
                intArr[i][j] = sc.nextInt();
            }
        }
        System.out.print(T.solution(n, intArr));
    }
}

This post is licensed under CC BY 4.0 by the author.