[백준] 2458 키 순서 c++

2022. 9. 14. 00:05·🍞 Algorithm/Baekjoon
https://www.acmicpc.net/problem/2458 
 

2458번: 키 순서

1번부터 N번까지 번호가 붙여져 있는 학생들에 대하여 두 학생끼리 키를 비교한 결과의 일부가 주어져 있다. 단, N명의 학생들의 키는 모두 다르다고 가정한다. 예를 들어, 6명의 학생들에 대하여

www.acmicpc.net

 

풀이과정

일단 각 간선의 가중치를 1로 잡았다.  
자신의 키가 몇 번째인지 알 수 있으려면, 자신을 제외한 무한대가 아닌 노드들이 N - 1개여야 한다.

num[i][j] = 1이라는 것은 i보다 j가 크다는 뜻이고,  
num[j][i] = 1이라는 것은 i보다 j가 작다는 뜻이다.

이 두 가지 경우 다 i학생의 기준에서 키의 기준을 알 수 있다.  
그러므로 num[i][j] != INF 또는 num[j][i] != INF 일 때를 카운트해서  
N - 1개면 자신의 키가 몇 번째인지 알 수 있는 학생이다.

 

 

#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;

int N, M, a, b;
int num[501][501];
const int INF = 1e9;

void floyd() {
	for (int k = 1; k <= N; k++) {
		for (int i = 1; i <= N; i++) {
			for (int j = 1; j <= N; j++) {
				if (num[i][j] > num[i][k] + num[k][j]) {
					num[i][j] = num[i][k] + num[k][j];
				}
			}
		}
	}
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);

	cin >> N >> M;
	for (int i = 1; i <= N; i++) {
		for (int j = 1; j <= N; j++) {
			if(i != j) num[i][j] = INF;
		}
	}

	for (int i = 0; i < M; i++) {
		cin >> a >> b;
		num[a][b] = 1;
	}
	floyd();

	int res = 0;
	for (int i = 1; i <= N; i++) {
		int cnt = 0;
		for (int j = 1; j <= N; j++) {
			if (i == j) continue;
			// i보다 큰 사람이 존재 || i보다 작은 사람이 존재
			if (num[i][j] != INF || num[j][i] != INF) {
				cnt++;
			}
		}
		if (cnt == N - 1) res++; // 자신을 제외한 모든 정점과 연결
	}
	cout << res;
}
저작자표시 (새창열림)

'🍞 Algorithm > Baekjoon' 카테고리의 다른 글

[백준] 21940 가운데에서 만나기 c++  (0) 2022.09.14
[백준] 14938 서강그라운드 c++  (0) 2022.09.14
[백준] 2910 빈도 정렬 c++  (0) 2022.09.14
[백준] 17219 비밀번호 찾기 c++  (0) 2022.09.14
[백준] 5568 카드 놓기 c++  (0) 2022.09.13
'🍞 Algorithm/Baekjoon' 카테고리의 다른 글
  • [백준] 21940 가운데에서 만나기 c++
  • [백준] 14938 서강그라운드 c++
  • [백준] 2910 빈도 정렬 c++
  • [백준] 17219 비밀번호 찾기 c++
박빵이
박빵이
2025년에도 갓생살기
  • 박빵이
    기억보다 기록
    박빵이
  • 전체
    오늘
    어제
    • 분류 전체보기 (337)
      • 🍞 FrontEnd (97)
        • HTML+CSS (4)
        • JavaScript (17)
        • TypeScript (4)
        • React (52)
        • Next.js (2)
        • Android (15)
      • 🍞 BackEnd (24)
        • Java (15)
        • Node.js (6)
        • Spring (1)
      • 🍞 Cloud & Infra (0)
        • AWS SAA (0)
        • Microsoft Azure (0)
      • 🍞 Algorithm (147)
        • C++ (4)
        • Baekjoon (41)
        • Programmers (97)
      • 🍞 Computer Science (18)
        • 운영체제 (1)
        • 데이터 통신 (6)
        • 네트워크 (6)
        • 데이터베이스 (1)
      • 🍞 대외활동 & 부트캠프 (42)
        • 삼성 청년 SW 아카데미 (1)
        • LG유플러스 유레카 (0)
        • 한국대학생IT경영학회 (1)
        • IT연합동아리 UMC (17)
        • 길벗 블로깅 멘토 (18)
        • IT연합동아리 피로그래밍 (3)
        • 개발 컨퍼런스 (2)
  • 블로그 메뉴

    • Admin
  • 링크

    • GitHub
  • 인기 글

  • 태그

    유니온파인드
    umc
    길벗 블로깅 멘토링
    map
    react
    Front
    Java
    프로그래머스
    level2
    알고리즘
    안드로이드
    level1
    C++
    코틀린
    코딩자율학습
    길벗 블로깅 멘토
    위상정렬
    백준
    Android
    JavaScript
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
박빵이
[백준] 2458 키 순서 c++
상단으로

티스토리툴바