반응형
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
- 수료
- 14942
- 59412
- 퍼즐 조각 채우기
- 설명
- 오블완
- 프로그래머스
- 142085
- java
- 146355
- MySQL
- 핵심
- 10기
- PCCP
- 132202
- 티스토리챌린지
- SSAFY
- 후기
- 소프티어
- 진료과별 총 예약 횟수 출력하기
- 해결
- 정기 코딩 인증평가
- softeer
- 59409
- 싸피
- SQL
- 165672
- 백준
- 조건에 부합하는 중고거래 상태 구하기
- 12930
Archives
- Today
- Total
개발 쥬스
[프로그래머스] 49191 순위 본문
반응형
🔗 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/49191
🔍 해결 과정
이 문제는 그래프 문제 중에서도 플로이드 워셜 알고리즘을 통해 해결할 수 있습니다.
문제의 예시를 바탕으로 그래프를 그려보면 다음과 같습니다.
그림에서 화살표가 나가는 노드가 승리한 노드임을 의미하고, 화살표가 들어가는 노드가 패배한 노드임을 의미합니다.
2번 노드는 모든 연결된 모든 노드와의 승패 정보를 알 수가 있고, 5번 노드는 2번 노드와 연결된 다른 노드들과의 승패 관계를 바탕으로 5위임을 알 수가 있어 결론적으로 순위를 알 수 있는 노드의 개수는 2개입니다.
위 그래프 그림을 테이블 정보로 나타내면 다음과 같이 나타낼 수가 있습니다.
그림에서 각 행에 있는 노드가 모든 열의 노드에서의 승패 결과를 나타내면 위 그림과 같습니다.
이 때 모든 선수와의 승패 결과를 알기 위해서 플로이드 워셜이 적용 됩니다. 즉,
선수 A가 선수 B를 이기고, 선수 B가 선수 C를 이기면, 선수 A는 선수 C를 이긴 것으로 간주합니다.
이 원리를 바탕으로 플로이드 워셜을 적용하여 graph 테이블을 정리하면 다음과 같습니다.
행에서 2번 노드와 5번 노드를 봤을 때 모든 노드와의 승패 정보를 알 수가 있고, 나머지 노드는 그렇지 않기에 순위를 알 수 있는 노드는 총 2개임을 알 수가 있습니다.
✏️ 코드
import java.util.*;
class Solution {
private static final int WIN = 1;
private static final int LOSE = -1;
public int solution(int n, int[][] results) {
int answer = 0;
int[][] graph = new int[n + 1][n + 1];
// 승패 정보를 graph에 기록하기
for (int[] result : results) {
int win = result[0];
int lose = result[1];
graph[win][lose] = WIN;
graph[lose][win] = LOSE;
}
//플로이드 워셜 알고리즘 적용하기
for (int k = 1; k <= n; ++k) {
for (int i = 1; i <= n; ++i) {
if (graph[i][k] == 0) {
continue;
}
for (int j = 1; j <= n; ++j) {
if (graph[j][k] == 0) {
continue;
}
if (graph[i][k] == graph[k][j]) {
graph[i][j] = graph[k][j];
}
}
}
}
// 알 수 있는 순위 정보 출력하기
for (int i = 1; i <= n; ++i) {
int zero = 0;
for (int j = 1; j <= n; ++j) {
if (graph[i][j] == 0) {
++zero;
}
}
if (zero == 1) {
++answer;
}
}
return answer;
}
}
반응형
'알고리즘' 카테고리의 다른 글
[프로그래머스/Java] 181836 그림 확대 (0) | 2024.11.14 |
---|---|
[프로그래머스/Java] 181862 세 개의 구분자 (2) | 2024.11.13 |
[프로그래머스/Java] 43238 퍼즐 조각 채우기 (0) | 2024.10.30 |
[프로그래머스/Java] 84021 퍼즐 조각 채우기 (0) | 2024.10.30 |
[프로그래머스/Java] 42628 이중우선순위큐 (0) | 2024.10.30 |