작성
·
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 언어를 이용한 알고리즘 문제 풀이 중 ‘임시반장 정하기’ 문제를 풀기 위한 코드입니다. 해당 코드가 오답처리 되는 이유는 여러 가지가 있을 수 있으며, 코드를 자세히 분석하여 문제가 발생할 수 있는 부분을 설명 드리겠습니다.
배열 인덱스 문제:
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++)
로 수정해야 합니다.중복 체크 로직의 문제:
cnt
변수로 이를 체크하지만, 이곳에서는 중복으로 학급에 같이 올 수 있다는 점을 고려하지 않습니다. 코드는 모든 학년과 학생을 비교하고 첫 매칭에서 break 되어 더 이상 해당 학생에 대해서 비교를 하지 않기 때문에, 로직에 오류가 있을 수 있습니다.Logic 구조 문제:
min
이라는 변수를 사용하여 cnt
값을 비교하는 과정에서 초기화 문제도 검토해야 합니다. 보통 min
변수는 최솟값을 가지고 있어야 하지만, ‘임시 반장’ 문제에서는 max
를 사용하여 최대 값으로 임시 반장을 결정하는 것이 타브로 보입니다.이 문제를 해결하기 위한 비슷한 질문과 답변들이 있어 소개해 드리겠습니다:
각 질문의 링크를 참고하셔서 문제를 디버깅 해보시면 좋겠습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.