프라이D
프라이Develog(❁´◡`❁)
프라이D
전체 방문자
오늘
어제
  • ALL (378)
    • TDD, Cleancode with JavaScr.. (5)
    • 프로젝트 (32)
      • work (3)
      • 직접 만드는 기술 블로그 (2)
      • 데일리 옥션 (19)
      • 모락모락 (8)
    • Computer Science (1)
    • Algorithm & 자료구조 (94)
      • 알고리즘 w.JavaScript (53)
      • 자료구조 (5)
      • (인프런) 자바스크립트 알고리즘 문제풀이 (34)
    • JavaScript (45)
      • JavaScript (41)
      • 모던 자바스크립트 Deep Dive (4)
    • WEB (13)
    • 회고 (12)
    • TIL (109)
    • WIL (7)
    • Stacks (20)
      • React.js (6)
      • Next.js (1)
      • Redux (3)
      • Node.js (2)
      • GIT (2)
      • SAP (1)
    • 15일 메이킹 프로젝트 (15)
    • 이전 기록 (14)
    • ETC. (5)
    • ---------------2021 (6)
      • 내일배움단-웹개발 5주 (2)
      • 정보처리기사 (4)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • 알고리즘
  • 내일배움카드
  • nomadcoder
  • 2023 인프콘 후기
  • 자바스크립트비트마스크
  • 코딩프로젝트
  • vanilaJS
  • 자바스크립트알고리즘
  • 자바스크립트
  • nomadcoders
  • 모던자바스크립트딥다이브
  • 내일배움단
  • 스파르타코딩클럽
  • MySQL
  • 비트마스크
  • 국비지원
  • JavaScript
  • 코드스테이츠
  • 투포인터알고리즘
  • Til

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
프라이D

프라이Develog(❁´◡`❁)

Algorithm & 자료구조/(인프런) 자바스크립트 알고리즘 문제풀이

[알고리즘]멘토링 - 완전탐색

2022. 2. 3. 23:50

문제

현수네 반 선생님은 반 학생들의 수학점수를 향상시키기 위해 멘토링 시스템을 만들려고 합니다. 멘토링은 멘토(도와는 학생)와 멘티(도움을 받는 학생)가 한 짝이 되어 멘토가 멘티의 수학공부를 도와주는 것입니다.
선생님은 M번의 수학테스트 등수를 가지고 멘토와 멘티를 정합니다. 만약 A학생이 멘토이고, B학생이 멘티가 되는 짝이 되었다면, A학생은 M번의 수학테스트에서 모두 B학생보다 등수가 앞서야 합니다.
M번의 수학성적이 주어지면 멘토와 멘티가 되는 짝을 만들 수 있는 경우가 총 몇 가지 인지 출력하는 프로그램을 작성하세요.

 

입력예제

4 3 //학생수 N, 테스트 횟수 M
3 4 1 2
4 3 2 1
3 1 4 2

 

풀이

function solution(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;
            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 (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(solution(arr));

해설

for (let i = 1; i <= n; i++) {
  for (let j = 1; j <= n; j++) { //멘토 i 일 때, 멘토 j 가 되는 모든 경우의 수
    let cnt = 0;
    for (let k = 0; k < m; k++) { //m만큼의 테스트 k에서 학생의 수 만큼 s를 돌며 위치(등수)를 얻음
      let pi = 0; //학생 i의 자릿값 초기화
      let pj = 0; //학생 j의 자릿값 초기화
      for (let s = 0; s < n; s++) {
        if (test[k][s] === i) pi = s; //k번째 test에서 s의 값이 i와 같다면, pi는 s 즉 i의 위치를 얻음(몇등인지!)
        if (test[k][s] === j) pj = s; //k번째 test에서 s의 값이 j와 같다면, pj는 j의 위치값을 할당받음 
      }
      if (pi < pj) cnt++; //얻은 결과값을 비교해 i가 멘토가 되는 조건에 부합된다면 cnt를 카운트
    }
    if (cnt === m) answer++; 
  } //모든 k 만큼의 test를 다 돌고 cnt가 m, 테스트 횟수와 같다면 조건에 부합하므로 answer에 카운트
}
저작자표시 (새창열림)

'Algorithm & 자료구조 > (인프런) 자바스크립트 알고리즘 문제풀이' 카테고리의 다른 글

[알고리즘]k번째 큰 수  (0) 2022.02.06
[알고리즘]졸업선물 - sort 정렬, 완전탐색  (0) 2022.02.06
[알고리즘]뒤집은 소수(소수 판별하기)  (0) 2022.02.02
[알고리즘]자릿수의 합  (0) 2022.02.01
[알고리즘]문자열 압축  (0) 2022.02.01
    'Algorithm & 자료구조/(인프런) 자바스크립트 알고리즘 문제풀이' 카테고리의 다른 글
    • [알고리즘]k번째 큰 수
    • [알고리즘]졸업선물 - sort 정렬, 완전탐색
    • [알고리즘]뒤집은 소수(소수 판별하기)
    • [알고리즘]자릿수의 합
    프라이D
    프라이D
    틀린내용 정정 및 개선사항은 언제든지 댓글 달아주세요 :D

    티스토리툴바