프로그래머스 문제 - 순위

JUNWOO KIM·2023년 11월 21일
0

알고리즘 풀이

목록 보기
26/105

프로그래머스 순위 문제 풀이를 진행하였습니다.

문제 해석

문제를 읽으면 아래와 같은 해석이 가능합니다.

n명의 격투선수가 있으며 1번부터 n번까지 순서대로 번호를 부여받습니다.
경기 결과 [A,B]식으로 보여주는데 A선수가 B선수를 이겼다는 뜻입니다.
몇몇 경기 결과가 분실되어 정확하게 순위를 매길 수 없는 선수들도 있습니다.
정확한 순위를 매길 수 있는 선수들의 수를 구해야합니다.

문제 풀이

A가 B를 이겼다는 정보만으로는 순위를 매기기에는 힘듭니다.
그래서 A가 B를 이겼다면 B는 A한테 졌다는 말도 되기에 둘을 같이 확인하며 순위를 매길 수 있습니다.
승패 정보들을 2차원 배열에 넣어 저장해둡니다.

두 결과를 비교하여 한 선수의 결과를 예측해낼 수 있습니다.
만약 [2,4], [4,5]일 경우
2번 선수는 4번 선수를 이기며 4번 선수는 5번 선수를 이깁니다.
그렇게 되면 2번 선수도 5번 선수를 이길 수 있게 되므로 [2,5]라는 새로운 결과를 알 수 있게 됩니다.
지는 상황도 위와 같이 비교하며 찾아낼 수 있습니다.

모든 결과를 비교해도 나오지 않는 결과를 가진 선수는 순위를 매길 수 없는 선수입니다.

전체 코드

#include <bits/stdc++.h>
#include <string>
#include <vector>

using namespace std;

int solution(int n, vector<vector<int>> results) {
    int answer = 0;
    int resultMap[101][101] = {0,};
    
    for(int i = 0; i <= n; i++)
    {
        for(int j = 0; j <= n; j++)
        {
            resultMap[i][j] = 0;
        }
    }
    //맵에 승패를 입력해줌
    for(vector<int> v : results)
    {
        resultMap[v[0]][v[1]] = 1;
        resultMap[v[1]][v[0]] = -1;
    }
    
    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= n; j++)
        {
            if(i != j)
            {
                //만약 경기 결과가 있을 경우
                if(resultMap[j][i] != 0)
                {
                    int curResult = resultMap[j][i];
                    for(int k = 1; k <= n; k++)
                    {
                        if(resultMap[i][k] == curResult)
                        {
                            resultMap[j][k] = curResult;
                        }
                    }
                }
            }
        }
    }
    //경기 결과가 나오지 않은 선수들을 찾아 빼줍니다.
    answer = n;
    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= n; j++)
        {
            if(resultMap[i][j] == 0 && i != j)
            {
                answer--;
                break;
            }
        }
    }
    
    return answer;
}

출처

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

profile
게임 프로그래머 준비생

0개의 댓글