Inflearn brand logo image

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

작성자 없음

작성자 정보가 삭제된 글입니다.

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

질문드립니다.

작성

·

214

0

안녕하세요. 강사님
2-11 임시반장 정하기 문제를
1. 아래와 같이 풀었는데 틀린 사유를 아직 잘 모르겠어서 질문드립니다. ㅠㅠ
시간되실 때 봐주시면 감사하겠습니다.
 
2. 강사님의 풀이에서 break를 붙이지 않으면 오답이 된다고 하셨는데
break가 없어도 정답은 나오지 않나요?!
조건문을 빠져나가게 하려는 건 알겠는데..
 
 
3. 해주신 풀이 중
int[][] arr=new int[n+1][6];
이랑
for(int i=1; i<=n; i++){
for(int j=1; j<=5; j++){
arr[i][j]=kb.nextInt();
}
}
에서 [6][6]이 아닌 [n+1][6]이라고 쓰신 점과
j<=n이 아닌 j<=5로 쓰신 이유도 궁금합니다..
아는 게 별로 없어 죄송합니다ㅠ
import java.util.*;
class Main {	
	public int solution(int n, int[][] arr){
		int answer=0, max=0;
		for(int i=0; i<n; i++){
			int cnt=0;
			for(int j=0; j<n; j++){
				for(int k=0; k<n; k++){
					if(arr[i][k]==arr[j][k]){
						cnt++;
            break;
					}
				}
			}
			if(cnt>max){
				max=cnt;
				answer=i+1;
			}
		}
		return answer;
	}

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

답변 1

0

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

안녕하세요^^

for(int i=1; i<=n; i++){
for(int j=1; j<=5; j++){
arr[i][j]=kb.nextInt();
}
}

위에 코드에서 i변수는 학생수이고, j변수는 1학년부터 5학년까지를 의미합니다.

int[][] arr=new int[n+1][6];

그래서 arr배열의 행은 n+1로 해서 학생수만큼 행수가 나와야 해서이고, 열은 1학년부터 5학년으로 정해져 있으니 6의 크기로만 잡은것입니다.

 

중간에 break 를 해야 하는 이유는 i 학생과 j학생이 2학년과 3학년때 같은 반을 했어도 한 번만 카운팅해야 해서입니다. 이 부분은 영상에서 설명했으니 다시 자세히 보시기 바랍니다.

 

 

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기