public class C23 {
public int solution(int n, int[][]arr) {
int answer = 0, max = Integer.MIN_VALUE;
for(int i=1; i<=n; i++) {
int cnt = 0;
for(int j=1;j<=n;j++) {
for(int k=1;k<=5;k++) {
if(arr[i][k]==arr[j][k]) {
cnt++;
break;
}
}
}
if(cnt>max) {
max=cnt;
answer=i;
}
}
return answer;
}
public static void main(String[] args) {
C23 c = new C23();
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[][] arr = new int[n+1][6];
for(int i=1;i<=n;i++) {
for(int j=1;j<=5;j++) {
arr[i][j] = sc.nextInt();
}
}
System.out.println(c.solution(n, arr));
sc.close();
}
}
이 문제는 풀이를 듣고 이해가 갔다.
풀이
1. 정수 n을 입력받고
2. [n+1][6]크기의 이차원 배열을 생성한다. n+1 학생수인데 0행은 빈 공간으로 해둘 것이기 때문,
뒤에 6은 5학년을 의미
3. solution함수에 매개변수로 배열과 n을 넘긴다
4. 최종적으로 제일 많이 겹치는 학생을 answer 값에 넣어줄 것이고, cnt는 겹치는 학생들 개수이다.
5. 첫번째 for문은 1번학생을 지목하는 것이다.
6. 두번째 for문은 변하는 학생을 의미한다. 1,2,3,4,5
7. 세번째 for문은
1번학생 1학년 == 1번학생 1학년 당연히 같은니깐 cnt++ break;
3번 반복문을 빠져나와서
1번학생 1학년 == 2번학생 1학년 일치 하지 않으면
1번학생 2학년 == 2번학생 2학년 일치 하지 않으면
1번학생 3학년 == 2번학생 3학년 일치하면 cnt++ break;
쭉 가서 cnt 구하고 max보다 cnt가 크면
max값을 cnt로 바꾸고
answer 값을 i(1번학생)으로 바꾸고
똑같이
2번학생 1학년 == 1번학생 1학년 이렇게 시작된다.
'코딩테스트 문제풀이' 카테고리의 다른 글
백준 2869번 - 달팽이는 올라가고 싶다 (0) | 2022.06.10 |
---|---|
멘토링 (0) | 2022.04.05 |
봉우리 (0) | 2022.04.04 |
격자판 최대합 (0) | 2022.04.04 |
등수구하기 (0) | 2022.04.04 |