[JavaScript/프로그래머스] 그래프 - 순위

2023. 5. 16. 13:10·Coding Test/Programmers_JavaScript
728x90

문제 링크

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


 

정답 코드

Array.from()을 이용하여 초기에 크기가 정해진 배열을 생성해두는 데 사용하였습니다.

function solution(n, results) {
  let answer = 0; // 정확하게 순위를 매길 수 있는 선수의 수를 저장하는 변수

  // n+1 크기의 2차원 배열 생성. 모든 값은 false로 초기화
  let graph = Array.from({ length: n + 1 }, () => Array(n + 1).fill(false));

  // results 배열을 순회하며 승리한 선수와 패배한 선수를 그래프에 표시
  for (let [a, b] of results) {
    graph[a][b] = true; // a 선수가 b 선수를 이긴 경우를 그래프에 표시
  }

  // 플로이드-워셜 알고리즘을 이용해 간접적인 승리 관계까지 그래프에 표시
  for (let k = 1; k <= n; k++) {
    for (let i = 1; i <= n; i++) {
      for (let j = 1; j <= n; j++) {
        if (graph[i][k] && graph[k][j]) {
          graph[i][j] = true; // i 선수가 k 선수를 이기고, k 선수가 j 선수를 이기면, i 선수가 j 선수를 이긴 것으로 표시
        }
      }
    }
  }

  // 각 선수에 대해 그 선수와 승패 관계를 가진 다른 선수의 수를 센다.
  for (let i = 1; i <= n; i++) {
    let count = 0;
    for (let j = 1; j <= n; j++) {
      if (graph[i][j] || graph[j][i]) {
        // i 선수가 j 선수를 이기거나, j 선수가 i 선수를 이긴 경우를 카운트
        count++;
      }
    }
    // 만약 그 선수와 승패 관계를 가진 다른 선수의 수가 n-1이면, 그 선수의 순위를 정확하게 알 수 있으므로 답을 1 증가시킨다.
    if (count === n - 1) {
      answer++;
    }
  }
  return answer; // 정확하게 순위를 매길 수 있는 선수의 수를 반환
}

 


End

728x90
저작자표시 비영리 변경금지 (새창열림)

'Coding Test > Programmers_JavaScript' 카테고리의 다른 글

[JavaScript/프로그래머스] 그래프 - 방의 개수  (0) 2023.05.16
[JavaScript/프로그래머스] 그래프 - 가장 먼 노드  (0) 2023.05.16
[JavaScript/프로그래머스] 연습문제 - 덧칠하기  (0) 2023.05.09
[JavaScript/프로그래머스] 연습문제 - 기사단원의 무기  (0) 2023.05.09
[JavaScript/프로그래머스] 연습문제 - 카드 뭉치  (0) 2023.05.08
'Coding Test/Programmers_JavaScript' 카테고리의 다른 글
  • [JavaScript/프로그래머스] 그래프 - 방의 개수
  • [JavaScript/프로그래머스] 그래프 - 가장 먼 노드
  • [JavaScript/프로그래머스] 연습문제 - 덧칠하기
  • [JavaScript/프로그래머스] 연습문제 - 기사단원의 무기
ThreeLight
ThreeLight
ThreeLight Studio의 블로그, TimeMap.exe에 오신 것을 환영합니다.
  • ThreeLight
    TimeMap.exe
    ThreeLight
  • 전체
    오늘
    어제
    • 분류 전체보기 (245)
      • Checkpoint (1)
      • (3D)Dev Deep Dive (0)
        • Templates & Guides (9)
        • Frontend origin (9)
        • Backend origin (1)
        • TroubleShootings (4)
      • Development Study (95)
        • Frontend (36)
        • Backend (21)
        • CS(Computer Science) (2)
        • Background Knowledges (11)
        • Algorithm (2)
        • Mobile (3)
        • AWS (6)
        • Python (6)
        • MSW(MapleStoryWorlds) (8)
      • Coding Test (59)
        • 문제.zip (1)
        • BaekJoon_JavaScript (0)
        • Programmers_JavaScript (9)
        • BaekJoon_Python (23)
        • Programmers_Python (10)
        • Undefined_Python (3)
        • Programmers_SQL (13)
      • 활동내역.zip (43)
        • 개인 (21)
        • Techeer (12)
        • Bootcamp (7)
        • Hackathon (1)
        • TeamProjects (2)
      • 여기 괜찮네??(사이트 | App) (5)
      • 재미있는 주제들 (8)
      • 개발 외 공부 저장소 (11)
        • 생산운영관리 (3)
        • 생활속의금융 (6)
        • 경영정보시스템 (2)
  • 링크

    • TimeMap.dmg (Portfolio)
    • GitHub 바로가기
    • 오픈프로필(카카오톡)
    • Medium 바로가기
    • Disquiet 바로가기
    • LinkedIn 바로가기
  • 인기 글

  • 태그

    프로그래머스
    CSS
    SQL
    TypeScript
    Python
    JavaScript
    Baek Joon
    HTML
    programmers
    react
  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.1
ThreeLight
[JavaScript/프로그래머스] 그래프 - 순위
상단으로

티스토리툴바