전체 방문자
오늘
어제
모달조아
Better than yesterday
모달조아
  • 분류 전체보기 (147)
    • PS (86)
      • BOJ (79)
      • 프로그래머스 (6)
    • 이론 (41)
      • 자료구조 (2)
      • 알고리즘 (8)
      • 데이터베이스 (1)
      • 운영체제 (1)
      • 네트워크 (3)
      • 디자인패턴 (7)
      • Java (13)
      • Spring (4)
      • JPA (1)
      • Git (1)
    • 개발 (18)
    • 프로젝트 (1)
    • 기록 (0)
      • 후기 (0)
    • etc (1)

최근 글

티스토리

hELLO · Designed By 정상우.
모달조아
PS/프로그래머스

프로그래머스 Lv.3 순위 [Java]

PS/프로그래머스

프로그래머스 Lv.3 순위 [Java]

2022. 9. 5. 04:12

1. 문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/49191

2. 문제 해설

순위를 확정 짓는 방법은 생각해내기 쉽다. 자신과 연관된 results 값이 n-1 개면 순위는 확정된다. (이때 n은 총 선수의 수)
문제에서 나온 경우로 예를 들자면, 2번 선수와 관련된 results 값은 [4, 3], [4, 2], [3, 2], [1, 2], [2, 5]이다. 즉, 1, 3, 4번 선수에게는 패했고, 5번 선수에게는 이긴 것이다. 자신과 관련된 경기 결과가 4개이므로 순위가 확정되었다. 2번 선수의 경우는 처리하기 쉽지만, 여기서 문제는 5번 선수와 같은 경우를 어떻게 처리할 것인가이다. 5번 선수는 주어진 results 값에서 자신과 연관된 값은 [2, 5] 밖에 없다. 하지만 1, 3, 4번에게 모두 진 2번에게 졌으므로 5번은 1, 2, 3, 4 모두에게 졌다는 것을 알 수 있다. 이것을 어떻게 처리해야할까?
플로이드-와샬 알고리즘의 접근 방식을 떠올려 보자. 플로이드-와샬 알고리즘은 모든 정점을 거쳐가면서 최단거리를 갱신하는 방식이다. 이와 같은 방식을 이용하여 본 문제에서는 i가 j를 이겼고, j가 k를 이겼다면 i는 k를 이겼다고 처리할 수 있다. (아래 코드에서 12~20줄)

3. 코드 보기

class Solution {
public int solution(int n, int[][] results) {
boolean[][] game = new boolean[n][n];
int answer = 0;
for (int i = 0; i < results.length; i++) {
int winner = results[i][0] - 1;
int loser = results[i][1] - 1;
game[winner][loser] = true;
}
for (int j = 0; j < n; j++) {
for (int i = 0; i < n; i++) {
for (int k = 0; k < n; k++) {
if (game[i][j] && game[j][k]) {
game[i][k] = true;
}
}
}
}
for (int i = 0; i < n; i++) { // 자신과 연관된 결과의 수를 찾는 과정
int winOrLose = 0;
for (int j = 0; j < n; j++) {
if (game[i][j] || game[j][i]) {
winOrLose++;
}
}
if (winOrLose == n - 1) {
answer++;
}
}
return answer;
}
}
저작자표시 (새창열림)

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

프로그래머스 Lv.2 예상 대진표 [Java]  (0) 2022.09.13
프로그래머스 Lv.2 게임 맵 최단거리 [Java]  (0) 2022.09.02
2021 카카오 채용연계형 인턴십 Lv3 표 편집 [Java]  (0) 2021.12.04
2021 카카오 채용연계형 인턴십 Lv2 거리두기 확인하기 [Java]  (0) 2021.12.02
2021 카카오 채용연계형 인턴십 Lv1 숫자 문자열과 영단어 [Java]  (0) 2021.11.25
  • 1. 문제 링크
  • 2. 문제 해설
  • 3. 코드 보기
'PS/프로그래머스' 카테고리의 다른 글
  • 프로그래머스 Lv.2 예상 대진표 [Java]
  • 프로그래머스 Lv.2 게임 맵 최단거리 [Java]
  • 2021 카카오 채용연계형 인턴십 Lv3 표 편집 [Java]
  • 2021 카카오 채용연계형 인턴십 Lv2 거리두기 확인하기 [Java]
모달조아
모달조아

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.