문제
현수네 반 선생님은 반 학생들의 수학점수를 향상시키기 위해 멘토링 시스템을 만들려고 합니다. 멘토링은 멘토(도와주는 학생)와 멘티(도움을 받는 학생)가 한 짝이 되어 멘토가 멘티의 수학공부를 도와주는 것입니다.
선생님은 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
4 3
3 4 1 2
4 3 2 1
3 1 4 2
▣ 출력예제 1
3
(3, 1), (3, 2), (4, 2)와 같이 3가지 경우의 (멘토, 멘티) 짝을 만들 수 있다.
풀이
↓(k) / 등수(s)→ | 0 | 1 | 2 | 3 |
---|---|---|---|---|
0 | 3 | 4 | 1 | 2 |
1 | 4 | 3 | 2 | 1 |
2 | 3 | 1 | 4 | 2 |
4중 for문으로 푸는 문제다. 4중 for문을 잘 안써서 그런지 써야겠다는 생각도 안들었따... ㅠㅠ
우선 i, j 두 학생을 비교하기 위해 이중 for문을 작성하고,
표에 있는 등수(이차원 배열에 입력받은 값)를 순회하기위해서 다시 k와 s를 사용해 4중 for문을 만든다.
for문의 인덱스 s를 등수로 사용하고, (등수 우열만 가리면 되므로 0부터 시작해도 상관없음)
표를 쭉 순회하다가 i번학생이나 j번 학생을 발견한 인덱스를 pi, pj에 저장해두고 pi < pj이면 cnt의 값을 1 더한다.
3번(m)의 수학 테스트 결과가 모두 pi < pj 인경우에만, 즉 cnt==m일 때 answer의 값을 1 더한다.
코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt(); //학생 수
int m = in.nextInt(); // 수학성적 m번줄
int[][] g = new int[m][n];
int answer = 0;
for(int i=0; i<m; i++) {
for(int j=0; j<n; j++) {
g[i][j] = in.nextInt();//학생번호
}
}
for(int i=1; i<=n; i++) { //학생i
for(int j=1; j<=n; j++) { //학생j 비교
int cnt = 0;
for(int k=0; k<m; k++) { //둘의 점수 찾음, s가 등수(0, 1, 2, 3)
int pi = 0, pj = 0 ;
for(int s=0; s<n; s++) { //한 줄 순회
if(g[k][s] == i) pi = s;
else if(g[k][s] == j) pj = s;
}
if(pi < pj) cnt++; //주의! pi가 등수가 앞선다 = 숫자가 더 작다
}
if(cnt == m) answer++;
}
}
System.out.print(answer);
}
}
'PS(Java) > 인프런 강의 문제' 카테고리의 다른 글
[PS] 인프런 강의 - Two Pointers, Sliding window, Math 2. 공통원소 구하기 (0) | 2022.10.23 |
---|---|
[PS] 인프런 강의 - Two Pointers, Sliding window, Math 1. 두 배열 합치기 (0) | 2022.10.21 |
[PS] 인프런 강의 - Array 11. 임시반장 정하기 (0) | 2022.10.20 |
[PS] 인프런 강의 - Array 10. 봉우리 (0) | 2022.10.20 |
[PS] 인프런 강의 - Array 9. 격자판 최대합 (0) | 2022.10.18 |