문제
- 현수네 반 선생님은 반 학생들의 수학점수를 향상시키기 위해 멘토링 시스템을 만들려고 합니다.
- 멘토링은 멘토(도와주는 학생)와 멘티(도움을 받는 학생)가 한 짝이 되어 멘토가 멘티의 수학공부를 도와주는 것입니다.
- 선생님은 M번의 수학테스트 등수를 가지고 멘토와 멘티를 정합니다.
- 만약 A학생이 멘토이고, B학생이 멘티가 되는 짝이 되었다면, A학생은 M번의 수학테스트에서 모두 B학생보다 등수가 앞서야 합니다.
- M번의 수학성적이 주어지면 멘토와 멘티가 되는 짝을 만들 수 있는 경우가 총 몇 가지 인지 출력하는 프로그램을 작성하세요.
입력
- 첫 번째 줄에 반 학생 수 N(1<=N<=20)과 M(1<=M<=10)이 주어진다.
- 두 번째 줄부터 M개의 줄에 걸쳐 수학테스트 결과가 학생번호로 주어진다. 학생번호가 제일 앞에서부터 1등, 2등, ...N등 순으로 표현된다.
- 만약 한 줄에 N=4이고, 테스트 결과가 3 4 1 2로 입력되었다면 3번 학생이 1등, 4번 학생이 2등, 1번 학생이 3등, 2번 학생이 4등을 의미합니다.
출력
- 첫 번째 줄에 짝을 만들 수 있는 총 경우를 출력합니다.
입출력 예제
풀이 방식을 정리해보자.
1. 학생 수 N과 M을 입력받는다.
2. M줄에 걸쳐 N등으로 표시해야하므로 그에 맞게 arr[M][N] 배열을 선언한다.
3. for문을 통해 학생번호들을 입력받는다.
4. 메소드 구현으로 넘어가보자.
5. 2중 for문을 통해 멘토, 멘티(i, j) 후보를 정한다.
6. for문( j ) 안에서 cnt 변수를 선언하고 0으로 초기화한다.
- cnt : 멘토, 멘티가 될 수 있는지를 저장할 변수이다.
7. 테스트 개수 즉, 행의 개수만큼 도는 for문( k ) 을 작성하고, pi와 pj를 선언하여 0으로 초기화한다.
- pi : i 번 학생의 등수
- pj : j 번 학생의 등수
8. 등수 즉, 열의 개수만큼 도는 for문( s ) 를 작성한다.
- for문( k ) : 테스트할 횟수. 행의 개수만큼 돌면서 i 번과 j번 학생의 멘토,멘티 여부를 탐색한다.
- for문( s ) : 등수만큼 도는 for 문. k 행 s번째 열(k, s)에 있는 학생의 등수를 확인한다.
9. for문( s ) 안에 등수를 구하는 식을 작성한다.
- 예를 들어 다음과 같은 값을 넣었다고 가정해보자.여기에서 3번과 1번인 학생들의 멘토 멘티 여부를 확인해보자.
- for문( k ) 를 통해 0번째 테스트 케이스부터 탐색해보자.
- 0번째 테스트 케이스에서 등수가 0번인 값을 보니 '3'이다. 3번 학생을 찾았다.
- arr[ 0 ][ 0 ] == 3 의 식이 성립하게 된다. 테스트 0번째에서 0번 등수에 성립했으므로 이를 통해 pi에는 0 이 들어간다.
- 즉, 3번 학생은 0등이라는 의미이다.
- 같은 방식으로 1번인 학생도 탐색하고, 2등이라는 것을 확인할 수 있다.
10. 각 학생의 등수를 찾아서 저장한 후에는 pi와 pj를 비교해서 멘토가 멘티보다 등수가 앞서있다면 cnt에 값을 누적한다.
- pi : 멘토 등수
- pj : 멘티 등수
11. 그렇게 모든 테스트 개수(M)만큼 돈 후에 cnt 값이 M과 동일하다면 결과값을 누적한다.
- cnt와 M이 동일하다는 것은 모든 테스트에서 멘토가 멘티보다 앞선 등수라는 것을 의미한다.
수행 결과를 확인한다.
해당 글은 인프런 > 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비(김태원)강의를 참고하여 작성하였습니다.
'알고리즘 > 인프런' 카테고리의 다른 글
섹션 3. Two pointers, Sliding window[효율성 : O(n^2)-->O(n)] 2. 공통원소구하기 (2) | 2022.09.25 |
---|---|
섹션 3. Two pointers, Sliding window[효율성 : O(n^2)-->O(n)] 1. 두 배열 합치기 (2) | 2022.09.23 |
섹션 2. Array(1, 2차원 배열)_11. 임시반장 정하기 (0) | 2022.09.22 |
섹션 2. Array(1, 2차원 배열)_10. 봉우리 (0) | 2022.09.21 |
섹션 2. Array(1, 2차원 배열)_9. 격자판 최대합 (2) | 2022.09.21 |