-
[04.완전탐색] 멘토링알고리즘 2022. 4. 10. 23:10
문제
현수네 반 선생님은 반 학생들의 수학점수를 향상시키기 위해 멘토링 시스템을 만들려고 합니 다. 멘토링은 멘토(도와주는 학생)와 멘티(도움을 받는 학생)가 한 짝이 되어 멘토가 멘티의 수학공부를 도와주는 것입니다.
선생님은 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 43
3412 4321 3142▣ 출력예제 1 3
(3, 1), (3, 2), (4, 2)와 같이 3가지 경우의 (멘토, 멘티) 짝을 만들 수 있다.
결과
X
내가 푼 방식
접근과정
- 소수를 구하는 함수를 생각할 수 있는 것이 관건인 문제이다.
- 소수는 1과 자기 자신을 제외한 모든 수로 나뉘어 지지 않는 수로 해당 값보다 작은 수들을 모두 나눠 나머지가 0인가 아닌가 여부로
소수를 판단한다. - 매개변수로 받는 array를 반복문을 돌려 해당 인덱스의 값을 거꾸로 돌리는 작업을 위해 정수로 만들어 배열을 만들고 reverse 메소드로 돌리고 다시 string으로 합치는 작업을 해준다 (32 - >23)
- 3번의 과정을 거친 string을 Number로 만들어주고 아까 만든 소수 구분 함수에 넣어 여부를 판단한다.
- 맞다면 return할 배열에 push하여 최종 그 배열을 return한다.
모범답안
function solution(test){ let answer=0; m=test.length; n=test[0].length; for(let i=1; i<=n; i++){ for(let j=1; j<=n; j++){ let cnt=0; 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; }리뷰
'알고리즘' 카테고리의 다른 글
[효율성/투포인터스 알고리즘] 두 배열 합치기 (0) 2022.04.24 [04.완전탐색] k번째 큰 수 (0) 2022.04.17 [04.완전탐색] 뒤집은 소수 (0) 2022.04.03 [04.완전탐색] 자리수의 합 (0) 2022.04.03 [03.문자열탐색] 문자열 압축 (0) 2022.04.03