Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Spring
- 시뮬레이션
- 로봇 청소기
- 스택
- 크루스칼
- 구현
- 우선순위큐
- 최소 신장 트리
- 백준
- 조합
- 투포인터
- 2018 KAKAO BLIND RECRUITMENT
- 트라이
- SWEA
- 다익스트라
- 2020 카카오 인턴십
- 2020 KAKAO BLIND RECRUITMENT
- BFS
- 투 포인터
- 2019 KAKAO BLIND RECRUITMENT
- 파이썬
- 프로그래머스
- 플로이드 와샬
- 이분탐색
- GIT
- 브루트포스
- 비트마스킹
- 플로이드와샬
- 2021 KAKAO BLIND RECRUITMENT
- 백트래킹
Archives
- Today
- Total
개발조아
[프로그래머스] 순위 파이썬 본문
728x90
문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/49191
고민고민하다가 접근법을 모르겠어서 검색해본 문제이다.
접근방법은 플로이드와샬로 하면 됐었다.
a가 b를 이겼다면 b는 항상 a 아래이고, b가 c를 이겼다면 c도 항상 b 아래이다
결국 c는 항상 a아래 이므로
a->b, b->c이면 a->c 인 것이므로 플로이드와샬로 접근이 가능하다.
a와 b 관계에서 a가 c를 이기고 c가 b를 이기는 관계가 있으면
a가 b를 이긴것으로 체크하고 (b,a), (c,a), (b,c)는 모두 진것으로 체크하면 된다.
마지막으로 순위가 결정되려면 모든 선수와 다 겨뤄봐야하므로 체크된 값의 개수가 n-1이거나 체크되지 않은 값이 1이면 된다.
def solution(n, results):
answer = 0
board = [[0]*n for _ in range(n)]
for a,b in results:
board[a-1][b-1] = 1
board[b-1][a-1] = -1
for k in range(n):
for i in range(n):
for j in range(n):
if i == j or board[i][j] in [1,-1]:
continue
if board[i][k] == board[k][j] == 1:
board[i][j] = 1
board[j][i] = board[k][i] = board[j][k] = -1
for row in board:
if row.count(0) == 1:
answer += 1
return answer
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 순위 검색 파이썬 (0) | 2021.08.13 |
---|---|
[프로그래머스] 메뉴 리뉴얼 파이썬 (0) | 2021.08.13 |
[프로그래머스] 정수 삼각형 파이썬 (0) | 2021.08.13 |
[프로그래머스] 네트워크 파이썬 (0) | 2021.08.13 |
[프로그래머스] 디스크 컨트롤러 파이썬 (0) | 2021.08.13 |
Comments