축구 순위

시간 제한1초메모리 제한128 MB

요약
승점으로 팀 순위를 정하고 동점 팀끼리는 재귀적으로 소규모 리그를 구성해 비교한 뒤, 골득실과 득점, 승수, 팀 번호로 최종 순위를 매기는 프로그램을 작성합니다.
난이도

보통10점 중 6점

유형
시뮬레이션, 정렬, 재귀, 구현
정답자
아직 제출이 없습니다

문제

여러 경기가 진행된 축구 리그의 순위를 계산해야 합니다.

각 경기에서 이긴 팀은 승점 3점, 비긴 팀은 승점 1점, 진 팀은 승점 0점을 얻습니다.

순위는 다음 규칙으로 정합니다.

  • 먼저 모든 경기에서 얻은 총 승점이 높은 팀부터 낮은 팀 순으로 정렬합니다.
  • 일부 팀만 같은 승점으로 묶이면, 그 팀들만 포함하는 새 리그를 만듭니다. 이 새 리그에서는 그 팀들끼리 치른 경기의 승점만 고려하고, 같은 규칙을 다시 적용합니다.
  • 현재 리그 또는 묶음에 속한 모든 팀의 승점이 같으면, 최초 리그의 전체 경기에서 계산한 골 득실, 득점 수, 승리 수를 차례로 비교합니다. 그래도 같으면 번호가 작은 팀이 더 높은 순위를 가집니다.

리그의 최종 순위를 구하는 프로그램을 작성하세요.

입력

첫째 줄에 팀의 수 N과 이미 치른 경기 수 K가 주어집니다. 1 <= N <= 100, 1 <= K <= 1000입니다. 팀은 1번부터 N번까지의 번호로 구분합니다.

다음 K개 줄에는 각 경기의 정보가 'A B C:D' 형식으로 주어집니다. 이는 A번 팀과 B번 팀이 경기했고, A번 팀이 C골, B번 팀이 D골을 넣었다는 뜻입니다. 0 <= C, D <= 9입니다.

출력

첫째 줄에 가장 높은 순위의 팀부터 가장 낮은 순위의 팀까지 팀 번호를 공백으로 구분해 출력합니다.

예제3

  1. 예제 1

    입력
    3 2
    1 2 0:3
    2 3 3:1
    
    예상 출력
    2 3 1
    
  2. 예제 2

    입력
    3 3
    1 2 1:3
    2 1 2:2
    1 3 4:0
    
    예상 출력
    2 1 3
    
  3. 예제 3

    입력
    5 4
    1 5 1:0
    2 3 2:1
    3 4 3:0
    4 5 1:1
    
    예상 출력
    2 3 1 5 4