멘토링 (4중 for문)

Seungmin Lim·2022년 2월 7일
0

코딩문제연습

목록 보기
26/63

문제

나의풀이 (풀지못함 ㅠ)

import java.util.*;

class Main {
	public int solution(int n,int m, int[][] arr) {
			int answer = 0;
			int pi = 0, pj = 0, count;
			
			for (int i = 1; i <= n; i++) {
				for (int j = 1; j <= n; j++) {
					count = 0;
					
					//i번호 학생과 j번호 학생을 고정시키고
					for (int k = 0; k < m; k++) {
						
						//k번 테스트의 i와 j 학생의 등수(s)찾기
						for(int s = 0; s < n; s++) {
							if(arr[k][s] == i) pi = s;
							if(arr[k][s] == j) pj = s;
						}
						//테스트 k번에서 i의 등수가 j보다 높다면 count++
						if(pi < pj) count++;
					}
					//모든테스트에서 등수가 높다면 answer++;
					if(count == m) answer ++;
				}
			}
			return answer;
		}
		    
	public static void main(String[] args) {
		Main T = new Main();
		Scanner kb = new Scanner(System.in);
		int n = kb.nextInt(); //학생수
		int m = kb.nextInt(); //테스트 개수
		int[][] arr = new int[m][n];
		for (int i = 0; i < m; i++) {
			for (int j = 0; j < n; j++) {
				arr[i][j] = kb.nextInt();
			}
		}
		System.out.println(T.solution(n,m,arr));
	}
	
}

풀이방법

4중 for문... 이해하기도 너무 어려웠다.
먼저, i,j로 1,2,3,4번 학생의 번호를 고정시킨다. ex) i = 1, j =3

그 후, 테스트의 갯수(m)만큼 3번째 for문을 돌리고,
등수(s)를 찾기위한 4번째 for문을 돌린다.

만약, arr[k][s] == i와 일치하는 순간이 온다면, k번째 테스트에서
i의 등수는 s이다.
왜냐하면, k번째 테스트에서 i가 s번째로 발견된것이기 때문에...

예시) 테스트가 1개뿐이고(k=1)이고 3 2 1 4 를 돈다고 가정해보면,
arr[0][s] 가 3인순간이 s = 0이기때문에, 3번(i)의 등수는 0등이다.
arr[0][s] 가 1인순간이 s = 2이기 때문에, 1번(i)의 등수는 2등이다.

이런 과정을 거쳐, 테스트m번을 모두 통과해서 count가 만약 테스트 개수(m)과 동일하다면, 즉, 모든 테스트를 순위가 높게 통과했다면, 짝이 한번 이루어진다 (answer ++;).

핵심키워드

4중 for문은 1시간동안 머리를 싸매다가 도저히 풀리지 않아서 강의를 봤는데...
강의를 보면서도 이해하기가 조금 어려웠다.
더 연습해서 내껄로 만들자!

0개의 댓글