초보 개발자의 일기
멘토링 본문
728x90
문제

입력
- 학생 수 N 시험횟수 M
- 그 아래 각 시험에서 나온 학생의 등수를 입력받는다.
출력
첫 번째 줄에 짝을 만들 수 있는 총 경우를 출력합니다.
입력 예시
4 3
3 4 1 2
4 3 2 1
3 1 4 2
출력 예시
3
풀이 방법
내가 직접 시도를 하였는데 내 생각으로 풀리지 않아 풀이를 보고 풀었다.
for문을 4중 for문을 돌려서 풀었다.
첫번째로 각 학생의 최종등수인 4를 각자리의 결과값으로 두고
두번의 for문을 더 돌려 [0][0]. [0][1]...[3][3],[3][4]까지의 자리수가 각각 i,j와 일치하는 경우를
변수에 저장한 후 pi가 pj보다 작으면 멘토가 가능하다는 알고리즘으로 문제를 풀었다.
내 코드
<html>
<head>
<meta charset="UTF-8">
<title>출력결과</title>
</head>
<body>
<script>
const sol = (test) =>{
let answer=0;
let m=test.length;
// 총 시험 횟수
let n=test[0].length;
// 학생 명수
for (let i=1; i<=n; i++){
for(let j=1; j<n; j++){
let cnt=0;
//m을 모두 만족하는 경우의 수
for(let k=0; k<m; k++){
let pi=pj=0;
for(let s=0; s<n; s++){
if(test[k][s]===i) pi=s;
if(test[k][s]===j) pj=s;
}
if(pi<pj) cnt++
}
if(cnt===m) answer++
}
}
return answer;
}
let arr=[[3, 4, 1, 2], [4, 3, 2, 1], [3, 1, 4, 2]];
console.log(sol(arr));
</script>
</body>
</html>
Solution
<html>
<head>
<meta charset="UTF-8">
<title>출력결과</title>
</head>
<body>
<script>
const sol = (test) =>{
let answer=0;
let m=test.length;
// 총 시험 횟수
let n=test[0].length;
// 학생 명수
for (let i=1; i<=n; i++){
for(let j=1; j<n; j++){
let cnt=0;
//m을 모두 만족하는 경우의 수
for(let k=0; k<m; k++){
let pi=pj=0;
for(let s=0; s<n; s++){
if(test[k][s]===i) pi=s;
if(test[k][s]===j) pj=s;
}
if(pi<pj) cnt++
}
if(cnt===m) answer++
}
}
return answer;
}
let arr=[[3, 4, 1, 2], [4, 3, 2, 1], [3, 1, 4, 2]];
console.log(sol(arr));
</script>
</body>
</html>
느낌점
어렵다
728x90