Scribbling

[Programmers] 순위 본문

Computer Science/Algorithms & Data Structures

[Programmers] 순위

focalpoint 2024. 6. 28. 18:20

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. Python

def solution(n, results):
    graph = [[0] * n for _ in range(n)]
    for u, v in results:
        u -= 1
        v -= 1
        graph[u][v] = 1
    for k in range(n):
        for u in range(n):
            for v in range(n):
                if graph[u][k] == 1 and graph[k][v] == 1:
                    graph[u][v] = 1
    ret = 0
    for i in range(n):
        cnt = 0
        cnt += sum(graph[i])
        cnt += sum(graph[j][i] for j in range(n))
        if cnt == n - 1:
            ret += 1
    return ret

 

2. C++

#include <string>
#include <vector>

using namespace std;

int solution(int n, vector<vector<int>> results) {
    int graph[n][n];
    for (int i=0; i<n; i++) {
        for (int j=0; j<n; j++) {
            graph[i][j] = 0;
        }
    }
	for (auto result : results) {
		int u = result[0], v = result[1];
		graph[--u][--v] = 1;
	}
	for (int k=0; k<n; k++) {
		for (int u=0; u<n; u++) {
			for (int v=0; v<n; v++) {
				if (graph[u][k] == 1 and graph[k][v] ==1) {
					graph[u][v] = 1;
				}
			}
		}
	}
	int ret = 0;
	for (int i=0; i<n; i++) {
		int cnt = 0;
		for (int j=0; j<n; j++) {
			cnt += graph[i][j];
		}
		for (int j=0; j<n; j++) {
			cnt += graph[j][i];
		}
		if (cnt == n - 1) ret ++;
	}
	return ret;
}