[Python] 순위

2026. 3. 28. 10:34·Coding-Test/프로그래머스
728x90
반응형

💻 문제 정의

n명의 권투선수가 권투 대회에 참여했고 각각 1번부터 n번까지 번호를 받았습니다. 권투 경기는 1대1 방식으로 진행이 되고, 만약 A 선수가 B 선수보다 실력이 좋다면 A 선수는 B 선수를 항상 이깁니다. 심판은 주어진 경기 결과를 가지고 선수들의 순위를 매기려 합니다. 하지만 몇몇 경기 결과를 분실하여 정확하게 순위를 매길 수 없습니다.

선수의 수 n, 경기 결과를 담은 2차원 배열 results가 매개변수로 주어질 때 정확하게 순위를 매길 수 있는 선수의 수를 return 하도록 solution 함수를 작성한다.

💡 접근 및 설계

A가 B를 이긴다고 하였을 때, 단순히 상하관계를 따지는 것이 아닌, 나머지 C, D, E, … 와의 승패도 따져야 한다. 만약 따질 수 없다면 등수를 확정 지을수 없게 된다. 또한 A가 B를 이기고, B가 C를 이긴다면 자연스레 A가 C를 이긴다는 것을 알 수 있다. 따라서 A와 C는 붙지 않아도 승패를 확정할 수 있다.

n명의 선수가 나 제외 n-1명의 선수와 승패가 확정된다면 해당 선수의 등수를 확정 지을 수 있게 된다는 점을 이용하여 접근하였다.

✏️ 알고리즘 풀이

win = [[False] * (n+1) for _ in range(n+1)]
    
for a, b in results:
    win[a][b] = True
    
for k in range(1, n+1):
    for i in range(1, n+1):
        for j in range(1, n+1):
            if win[i][k] and win [k][j]:
                win[i][j] = True

플로이드-워셜을 이용하여 문제를 해결하였다. A가 B를 이기고, B가 C를 이긴다면, A는 C를 이긴다. 즉 A와 C의 승패가 확실해졌다는 것을 이용한다.

answer = 0
for i in range(1, n+1):
    cnt = 0
    for j in range(1, n+1):
        if win[i][j] or win[j][i]:
            cnt += 1
            
    if cnt == n-1:
        answer += 1

각 선수에 대해서 승패가 확정난 인원이 n-1명이면 해당 선수의 등수를 확정지을 수 있으므로 정답에 +1 해준다.

🗒️ 최종 제출 코드

def solution(n, results):
    win = [[False] * (n+1) for _ in range(n+1)]
    
    # 초기 세팅
    for a, b in results:
        win[a][b] = True
    
    # i가 k를 이기고, k가 j를 이긴다면, i는 자동으로 j를 이긴다.    
    for k in range(1, n+1):
        for i in range(1, n+1):
            for j in range(1, n+1):
                if win[i][k] and win [k][j]:
                    win[i][j] = True
    
    answer = 0
    for i in range(1, n+1):
        cnt = 0
        for j in range(1, n+1):
		        # i와 j가 싸운적이 있다면, 수 증가
            if win[i][j] or win[j][i]:
                cnt += 1
        
        # 싸운 상대가 나 제외 n-1명이면 모든 상대외 승부가 결정되었기에 등수를 확정할 수 있다.
        if cnt == n-1:
            answer += 1
            
    return answer

💭 오늘의 회고

-

728x90
반응형
저작자표시 (새창열림)

'Coding-Test > 프로그래머스' 카테고리의 다른 글

[Python] 징검다리  (1) 2026.03.25
[Python] 단속카메라  (0) 2026.03.24
[Python] 섬 연결하기  (0) 2026.03.23
[Python] 구명보트  (0) 2026.03.22
[Python] 조이스틱  (0) 2026.03.21
'Coding-Test/프로그래머스' 카테고리의 다른 글
  • [Python] 징검다리
  • [Python] 단속카메라
  • [Python] 섬 연결하기
  • [Python] 구명보트
희완
희완
희완한 코딩일상
    반응형
  • 희완
    Code-Heewan
    희완
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Python
        • 가상환경
      • Algorithm
      • Coding-Test
        • 백준
        • 프로그래머스
        • 항해99
      • Data-Analysis
      • 웹 개발
        • django
      • AWS
      • 공모전
      • Mobile
  • 링크

    • Github
  • 300x250
  • hELLO· Designed By정상우.v4.10.3
희완
[Python] 순위
상단으로

티스토리툴바