• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

11. 임시반장정하기 질문 있습니다.

23.07.20 02:32 작성 23.07.20 18:17 수정 조회수 158

0

아래의 3중 for문에 print문을 넣어서 실행해보면 자기자신과 같은 경우도 포함되어 if문에 들어가게 되는데, 그렇게 해서 count에 1이 더해지는 것은 잘못된 로직 아닌가요?

 그렇다면 3중 for문 안의 if문 조건에 i != j 를 포함시켜야 맞지 않을까요?

 

public int solution(int n, int[][] arr) {
        int answer = 0;
        int max = Integer.MIN_VALUE;

        for (int i = 1; i <= n; i++) { // i번 학생
            int count = 0;
            for (int j = 1; j <= n; j++) { // j번 학생
                for (int k = 1; k <= 5; k++) {  // k : 학년
                    if (arr[i][k] == arr[j][k]) {
                        System.out.println("arr[" + i + "][" + k + "] = " + arr[i][k] + " / arr[" + j + "][" + k + "] = " + arr[j][k]);
                        count++;
                        System.out.println("count : " + count);
                        System.out.println();
                        break;
                    }
                }
            }

            if (count > max) {
                max = count;
                answer = i;
            }
        }

        return answer;
    }

답변 2

·

답변을 작성해보세요.

0

안녕하세요^^

네. 문제가 설명한 자기와 같은 반을 한 학생수를 정확하게 구한다면 if(i ! = j)를 하는게 맞습니다. 하지만 넣지 않았다고 해서 답이 잘못 나오는 일은 없습니다. 모든학생이 똑같이 자기 자신과 비교해서 1을 동일하게 더 더하기 때문에 이 문제가 요구하는 임시반장을 정하는 로직에는 문제가 될게 없습니다.

안녕하세요.

네 알겠습니다!

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.07.22

안녕하세요, 인프런 AI 인턴이에요.

해당 코드에서는 학생들의 성적을 비교하여 가장 많은 과목을 동일하게 듣는 학생을 찾는 로직으로 보입니다. 그리고, count 변수는 과목이 같은 학생의 수를 카운트하는 역할을 하며, max 변수는 가장 많은 과목을 동일하게 듣는 학생 수를 저장합니다.

3중 for문에서 i, j는 학생 번호를 말하고, k는 학년을 나타냅니다. 따라서, 각 학생의 성적을 비교하여 동일한 경우 count 변수를 1씩 증가시키고, if문 안에서는 카운트한 값이 현재까지의 최댓값보다 큰 경우 max 변수와 answer 변수를 업데이트합니다.

그렇게 되면, i == j인 경우이더라도 count 변수에 1이 더해지는데, 이는 문제가 되지 않습니다. 왜냐하면, 동일한 과목들을 이미 카운트한 학생의 수를 구하는 것이기 때문에 자기 자신과 동일한 과목이 있는 경우에도 count 변수에 1이 더해질 필요가 있습니다.

따라서, 코드에서 i == j인 경우를 고려하지 않고 그대로 진행해도 로직에는 문제가 없습니다. 위의 코드에서는 i와 j가 학생의 번호를 나타내기 때문에, i != j를 추가하는 것은 학생 본인을 제외하고 다른 학생들과 비교해야 한다는 의미가 됩니다.

추가로, print문은 단순히 디버깅을 위해 값을 확인하는 용도로 사용되는 것으로 보입니다. 따라서, 실행 시 필요한 경우에만 사용하고 실제 로직에서는 주석처리하거나 삭제하는 것이 좋습니다.

요청하신 내용에 대한 답변이었나요? 추가로 궁금한 사항이 있으면 얼마든지 물어보세요!

안녕하세요.

 

| 그렇게 되면, i == j인 경우이더라도 count 변수에 1이 더해지는데, 이는 문제가 되지 않습니다. 왜냐하면, 동일한 과목들을 이미 카운트한 학생의 수를 구하는 것이기 때문에 자기 자신과 동일한 과목이 있는 경우에도 count 변수에 1이 더해질 필요가 있습니다. |

=> 이 설명이 이해가 되지 않습니다. 자기 자신과 같은 반이었던 경우를 포함하는게 과연 맞을까요?

i == j 라고 해도 로직상에는 문제가 없지만, 문제가 요구한 대로 자기와 같은 반을 한 학생수를 정확하게 구한다면 if(i ! = j)를 하는게 맞다고 생각합니다.