문제설명
현수네 반 선생님은 반 학생들의 수학점수를 향상시키기 위해 멘토링 시스템을 만들려고 합니 다. 멘토링은 멘토(도와주는 학생)와 멘티(도움을 받는 학생)가 한 짝이 되어 멘토가 멘티의 수학공부를 도와주는 것입니다.
선생님은 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등을 의미합니다.
입출력 예
입력
4 3
3 4 1 2
4 3 2 1
3 1 4 2
출력
3
코드 설명
저는 총 5가지 단계로 코드를 구성해보았습니다!
1. 변수 및 배열 초기화
- answer: 멘토-멘티 관계가 성립하는 경우의 수를 저장할 변수.
- temp: 실제로 성립하는 멘토-멘티 관계를 저장할 배열.
- m: 테스트 횟수.
- n: 학생 수.
let answer = 0;
let temp = [];
let m = test.length;
let n = test[0].length;
2. 멘토-멘티 조합 확인
- 이중 for 루프를 사용하여 모든 멘토-멘티 조합을 확인합니다.
for (let i = 1; i <= n; i++) {
for (let j = 1; j <= n; j++) {
if (i !== j) { // 멘토와 멘티가 같은 경우는 제외
3. 각 테스트 케이스에 대한 확인
- 각 테스트 케이스에 대해 현재 멘토-멘티 조합이 성립하는지 확인합니다.
for (let k = 0; k < m; k++) {
let pi = 0; // 멘토의 등수
let pj = 0; // 멘티의 등수
// 각 테스트 케이스에서 멘토와 멘티의 등수 찾기
for (let s = 0; s < n; s++) {
if (test[k][s] === i) pi = s; // 멘토의 등수
if (test[k][s] === j) pj = s; // 멘티의 등수
}
- if (test[k][s] === i) pi = s;: 현재 인덱스 s에서의 학생 번호가 멘토(i)와 같으면, 그 학생의 등수 s를 pi에 저장합니다.
- if (test[k][s] === j) pj = s;: 현재 인덱스 s에서의 학생 번호가 멘티(j)와 같으면, 그 학생의 등수 s를 pj에 저장합니다.
4. 멘토-멘티 관계 성립 확인 및 결과 저장
- 현재 테스트 케이스에서 멘토의 등수가 멘티의 등수보다 낮으면 cnt를 증가시킵니다.
- 모든 테스트 케이스에서 cnt가 테스트 횟수와 동일하면 현재 조합이 성립하므로 temp 배열에 추가하고 answer를 증가시킵니다.
if (pi < pj) cnt++;
}
// 모든 테스트 케이스에서 멘토-멘티 관계가 성립하면 temp 배열에 추가하고 answer 증가
if (cnt == m) {
temp.push([i, j]); // 실제로 성립하는 경우를 temp 배열에 추가
answer++; // 성립하는 경우의 수 증가
}
5. 결과 출력 및 반환
- 실제로 성립하는 경우의 수를 출력하고 최종적으로 answer를 반환합니다.
console.log(temp); // 실제로 성립하는 경우의 수를 출력
return answer; // 총 성립하는 경우의 수 반환
소스코드&결과
코드
function solution(test) {
let answer = 0; // 멘토-멘티 관계가 성립하는 경우의 수를 저장할 변수
let temp = []; // 실제로 성립하는 멘토-멘티 관계를 저장할 배열
let m = test.length; // 테스트 횟수 --> 3
let n = test[0].length; // 학생 수 --> 4
// 모든 멘토(i)-멘티(j)의 경우의 수를 확인하기 위한 이중 for 루프
for (let i = 1; i <= n; i++) {
for (let j = 1; j <= n; j++) {
if (i !== j) { // 멘토와 멘티가 같은 경우는 제외
let cnt = 0; // 현재 멘토-멘티 조합에 대해 조건이 성립하는 횟수를 세는 변수
// 각 테스트 케이스에 대해 멘토-멘티 관계가 성립하는지 확인
for (let k = 0; k < m; k++) {
let pi = 0; // 멘토의 등수
let pj = 0; // 멘티의 등수
// 각 테스트 케이스에서 멘토와 멘티의 등수 찾기
for (let s = 0; s < n; s++) {
if (test[k][s] === i) pi = s; // 멘토의 등수
if (test[k][s] === j) pj = s; // 멘티의 등수
}
// 현재 테스트 케이스에서 멘토의 등수가 멘티의 등수보다 낮으면 cnt 증가
if (pi < pj) cnt++;
}
// 모든 테스트 케이스에서 멘토-멘티 관계가 성립하면 temp 배열에 추가하고 answer 증가
if (cnt == m) {
temp.push([i, j]); // 실제로 성립하는 경우를 temp 배열에 추가
answer++; // 성립하는 경우의 수 증가
}
}
}
}
console.log(temp); // 실제로 성립하는 경우의 수를 출력
return answer; // 총 성립하는 경우의 수 반환
}
// 예시로 주어진 테스트 케이스
let arr = [
[3, 4, 1, 2],
[4, 3, 2, 1],
[3, 1, 4, 2],
];
console.log(solution(arr)); // 함수 호출 및 결과 출력
결과

'Coding Test > 프로그래머스' 카테고리의 다른 글
[Java] 피자 나눠 먹기 (2) (0) | 2024.02.02 |
---|---|
[MySQL] 어린 동물 찾기 (0) | 2023.12.06 |
[MySQL] 상위 n개 레코드 (2) | 2023.11.15 |
[MySQL] 여러 기준으로 정렬하기 (0) | 2023.11.15 |
[MySQL] 나이 정보가 없는 회원 수 구하기 (2) | 2023.11.01 |
문제설명
현수네 반 선생님은 반 학생들의 수학점수를 향상시키기 위해 멘토링 시스템을 만들려고 합니 다. 멘토링은 멘토(도와주는 학생)와 멘티(도움을 받는 학생)가 한 짝이 되어 멘토가 멘티의 수학공부를 도와주는 것입니다.
선생님은 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등을 의미합니다.
입출력 예
입력
4 3
3 4 1 2
4 3 2 1
3 1 4 2
출력
3
코드 설명
저는 총 5가지 단계로 코드를 구성해보았습니다!
1. 변수 및 배열 초기화
- answer: 멘토-멘티 관계가 성립하는 경우의 수를 저장할 변수.
- temp: 실제로 성립하는 멘토-멘티 관계를 저장할 배열.
- m: 테스트 횟수.
- n: 학생 수.
let answer = 0;
let temp = [];
let m = test.length;
let n = test[0].length;
2. 멘토-멘티 조합 확인
- 이중 for 루프를 사용하여 모든 멘토-멘티 조합을 확인합니다.
for (let i = 1; i <= n; i++) {
for (let j = 1; j <= n; j++) {
if (i !== j) { // 멘토와 멘티가 같은 경우는 제외
3. 각 테스트 케이스에 대한 확인
- 각 테스트 케이스에 대해 현재 멘토-멘티 조합이 성립하는지 확인합니다.
for (let k = 0; k < m; k++) {
let pi = 0; // 멘토의 등수
let pj = 0; // 멘티의 등수
// 각 테스트 케이스에서 멘토와 멘티의 등수 찾기
for (let s = 0; s < n; s++) {
if (test[k][s] === i) pi = s; // 멘토의 등수
if (test[k][s] === j) pj = s; // 멘티의 등수
}
- if (test[k][s] === i) pi = s;: 현재 인덱스 s에서의 학생 번호가 멘토(i)와 같으면, 그 학생의 등수 s를 pi에 저장합니다.
- if (test[k][s] === j) pj = s;: 현재 인덱스 s에서의 학생 번호가 멘티(j)와 같으면, 그 학생의 등수 s를 pj에 저장합니다.
4. 멘토-멘티 관계 성립 확인 및 결과 저장
- 현재 테스트 케이스에서 멘토의 등수가 멘티의 등수보다 낮으면 cnt를 증가시킵니다.
- 모든 테스트 케이스에서 cnt가 테스트 횟수와 동일하면 현재 조합이 성립하므로 temp 배열에 추가하고 answer를 증가시킵니다.
if (pi < pj) cnt++;
}
// 모든 테스트 케이스에서 멘토-멘티 관계가 성립하면 temp 배열에 추가하고 answer 증가
if (cnt == m) {
temp.push([i, j]); // 실제로 성립하는 경우를 temp 배열에 추가
answer++; // 성립하는 경우의 수 증가
}
5. 결과 출력 및 반환
- 실제로 성립하는 경우의 수를 출력하고 최종적으로 answer를 반환합니다.
console.log(temp); // 실제로 성립하는 경우의 수를 출력
return answer; // 총 성립하는 경우의 수 반환
소스코드&결과
코드
function solution(test) {
let answer = 0; // 멘토-멘티 관계가 성립하는 경우의 수를 저장할 변수
let temp = []; // 실제로 성립하는 멘토-멘티 관계를 저장할 배열
let m = test.length; // 테스트 횟수 --> 3
let n = test[0].length; // 학생 수 --> 4
// 모든 멘토(i)-멘티(j)의 경우의 수를 확인하기 위한 이중 for 루프
for (let i = 1; i <= n; i++) {
for (let j = 1; j <= n; j++) {
if (i !== j) { // 멘토와 멘티가 같은 경우는 제외
let cnt = 0; // 현재 멘토-멘티 조합에 대해 조건이 성립하는 횟수를 세는 변수
// 각 테스트 케이스에 대해 멘토-멘티 관계가 성립하는지 확인
for (let k = 0; k < m; k++) {
let pi = 0; // 멘토의 등수
let pj = 0; // 멘티의 등수
// 각 테스트 케이스에서 멘토와 멘티의 등수 찾기
for (let s = 0; s < n; s++) {
if (test[k][s] === i) pi = s; // 멘토의 등수
if (test[k][s] === j) pj = s; // 멘티의 등수
}
// 현재 테스트 케이스에서 멘토의 등수가 멘티의 등수보다 낮으면 cnt 증가
if (pi < pj) cnt++;
}
// 모든 테스트 케이스에서 멘토-멘티 관계가 성립하면 temp 배열에 추가하고 answer 증가
if (cnt == m) {
temp.push([i, j]); // 실제로 성립하는 경우를 temp 배열에 추가
answer++; // 성립하는 경우의 수 증가
}
}
}
}
console.log(temp); // 실제로 성립하는 경우의 수를 출력
return answer; // 총 성립하는 경우의 수 반환
}
// 예시로 주어진 테스트 케이스
let arr = [
[3, 4, 1, 2],
[4, 3, 2, 1],
[3, 1, 4, 2],
];
console.log(solution(arr)); // 함수 호출 및 결과 출력
결과

'Coding Test > 프로그래머스' 카테고리의 다른 글
[Java] 피자 나눠 먹기 (2) (0) | 2024.02.02 |
---|---|
[MySQL] 어린 동물 찾기 (0) | 2023.12.06 |
[MySQL] 상위 n개 레코드 (2) | 2023.11.15 |
[MySQL] 여러 기준으로 정렬하기 (0) | 2023.11.15 |
[MySQL] 나이 정보가 없는 회원 수 구하기 (2) | 2023.11.01 |