강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

이동준님의 프로필 이미지
이동준

작성한 질문수

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

11. 임시반장정하기

이해가 되질 않습니다. 선생님이 작성해주신 코드로 제출했는데 오답처리됩니다. ( 배열 11.임시반장정하기)

작성

·

152

·

수정됨

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

 

 

package DJ_LEE.Array;

import java.util.Scanner;

public class Main10 {

    public  int  solutionOfLecture(int[][] arr, int num) {
        int answer =0;  int min = 0;

        for (int i=1; i<= num; i++) {
            int cnt = 0;
            for (int j = 1; j <= num; j++) {
                for (int k = 1; k <= 5; k++) {
                    if (arr[i][k] == arr[j][k]) {
                        cnt++;
                        break;
                    }

                }


            }
            if(cnt>min){
                min=cnt;

                answer=i;
            }

        }
        return answer;
    }

    public static void main(String[] args) {
        Main10 T = new Main10();
        Scanner kb = new Scanner(System.in);
        int num = kb.nextInt();
       int[][] arr = new int[num+1][6];

        for( int i=1; i<=num; i++){
            for(int j =1; j<=num; j++){
                int el = kb.nextInt();
                arr[i][j]=el;
            }
        }
            System.out.println(T.solutionOfLecture(arr,num));

    }
}

답변 2

0

김태원님의 프로필 이미지
김태원
지식공유자

안녕하세요^^

클래스 이름은 Main으로 해야 채점이 됩니다.

그리고 입력받을 때 j for문은 1부터 5까지 고정해야 합니다.

아래 코드는 님 코드를 수정한 정답이 나온 코드입니다.

import java.util.Scanner;

public class Main {

    public  int  solutionOfLecture(int[][] arr, int num) {
        int answer =0;  int min = 0;

        for (int i=1; i<= num; i++) {
            int cnt = 0;
            for (int j = 1; j <= num; j++) {
                for (int k = 1; k <= 5; k++) {
                    if (arr[i][k] == arr[j][k]) {
                        cnt++;
                        break;
                    }

                }


            }
            if(cnt>min){
                min=cnt;

                answer=i;
            }

        }
        return answer;
    }

    public static void main(String[] args) {
        Main T = new Main();
        Scanner kb = new Scanner(System.in);
        int num = kb.nextInt();
       int[][] arr = new int[num+1][6];

        for( int i=1; i<=num; i++){
            for(int j =1; j<=5; j++){
                int el = kb.nextInt();
                arr[i][j]=el;
            }
        }
            System.out.println(T.solutionOfLecture(arr,num));

    }
}

 

 

0

안녕하세요, 인프런 AI 인턴입니다. 이동준님 질문 주셔서 감사합니다.

현재 올려주신 코드는 Java 언어를 이용한 알고리즘 문제 풀이 중 ‘임시반장 정하기’ 문제를 풀기 위한 코드입니다. 해당 코드가 오답처리 되는 이유는 여러 가지가 있을 수 있으며, 코드를 자세히 분석하여 문제가 발생할 수 있는 부분을 설명 드리겠습니다.

  1. 배열 인덱스 문제:

    • Java에서는 배열 인덱스가 0부터 시작합니다. 그러나 현재 코드는 인덱스 1부터 시작하여 입력을 받습니다. 예를 들어, int num = kb.nextInt(); 이후에 배열 arr의 크기가 [num+1][6]으로 선언된 후 arr[i][j]=el;로 입력이 저장됩니다. 이는 각 학생마다 5개의 요소(1학년부터 5학년까지의 데이터)를 저장할 수 있으나, 실제 데이터 입력 구문에서 j의 반복 범위가 num까지 되어 있어, 인덱스를 벗어나게 됩니다. 학년은 1~5년까지이므로, for(j = 1; j <= 5; j++)로 수정해야 합니다.
  2. 중복 체크 로직의 문제:

    • 임시 반장을 정할 때, 주어진 학번 중 같은 반이었던 회수만을 카운트하여 가장 많이 같은 반이었던 학생을 선택해야 합니다. 코드에서 cnt 변수로 이를 체크하지만, 이곳에서는 중복으로 학급에 같이 올 수 있다는 점을 고려하지 않습니다. 코드는 모든 학년과 학생을 비교하고 첫 매칭에서 break 되어 더 이상 해당 학생에 대해서 비교를 하지 않기 때문에, 로직에 오류가 있을 수 있습니다.
  3. Logic 구조 문제:

    • min이라는 변수를 사용하여 cnt 값을 비교하는 과정에서 초기화 문제도 검토해야 합니다. 보통 min 변수는 최솟값을 가지고 있어야 하지만, ‘임시 반장’ 문제에서는 max를 사용하여 최대 값으로 임시 반장을 결정하는 것이 타브로 보입니다.

이 문제를 해결하기 위한 비슷한 질문과 답변들이 있어 소개해 드리겠습니다:

  1. 왜 오답인지 정말 모르겠습니다…
  2. 질문드립니다.
  3. 임시반장 오답케이스가 되는 이유를 잘 모르겠습니다…

각 질문의 링크를 참고하셔서 문제를 디버깅 해보시면 좋겠습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

이동준님의 프로필 이미지
이동준

작성한 질문수

질문하기