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 |
Tags
- sort
- 컴퓨팅사고
- 코딩테스트
- BFS
- 포스코 AI교육
- 포스코 ai 교육
- tflite
- dfs문제
- 포스코 교육
- bfs문제
- 삼성코테
- dfs
- MCU 딥러닝
- 다이나믹프로그래밍
- TensorFlow Lite
- 알고리즘
- 삼성역테
- 임베디드 딥러닝
- 코테
- 영상처리
- 그리디
- tinyml
- DP문제
- 삼성역량테스트
- 코테 문제
- 삼성코딩테스트
- 초소형머신러닝
- DP
- 딥러닝
- 자료구조
Archives
- Today
- Total
코딩뚠뚠
[백준문제풀이] 2252 줄 세우기 본문
반응형
풀이일시 : 2020-08-19
문제 :
N명의 학생들을 키 순서대로 줄을 세우려고 한다. 각 학생의 키를 직접 재서 정렬하면 간단하겠지만, 마땅한 방법이 없어서 두 학생의 키를 비교하는 방법을 사용하기로 하였다. 그나마도 모든 학생들을 다 비교해 본 것이 아니고, 일부 학생들의 키만을 비교해 보았다.
일부 학생들의 키를 비교한 결과가 주어졌을 때, 줄을 세우는 프로그램을 작성하시오.
입력:
첫째 줄에 N(1≤N≤32,000), M(1≤M≤100,000)이 주어진다. M은 키를 비교한 회수이다. 다음 M개의 줄에는 키를 비교한 두 학생의 번호 A, B가 주어진다. 이는 학생 A가 학생 B의 앞에 서야 한다는 의미이다.
학생들의 번호는 1번부터 N번이다.
ex)
3 2 //3번이 2번보다 앞
1 3
2 3
출력:
첫째 줄부터 앞에서부터 줄을 세운 결과를 출력한다. 답이 여러 가지인 경우에는 아무거나 출력한다.
ex)
1 2 3
풀이 :
줄을 세우는 규칙이 비교에 의한 순서이니 위상정렬의 문제이다.
queue를 이용한다.
입력 시 연결이 되는 link node에 진입차수를 ++ 해주고 topologySort 함수내에서 연결노드면 진입차수를 -- 한다. 이 과정 후에 진입차수가 0이 된다면 큐에 넣어준다.
#include <iostream>
#include <vector>
#include <queue>
#define MAX 32001
#define _CRT_SECURE_NO_WARNINGS
using namespace std;
int n, inDegree[MAX], result[MAX];
vector <int> a[MAX];
void topologySort() {
queue<int> q;
for (int i = 1; i <= n; i++) {
if (inDegree[i] == 0) { //차수가 0인걸 일단 큐에 넣는다.
q.push(i);
}
}
for (int i = 1; i <= n; i++) { //돌아가면서 조건에맞는걸 계속 큐에 넣고 맨앞에있는거 빼고 반복
int x = q.front();
q.pop();
result[i] = x; //큐 맨앞에있는걸 꺼내고 result에 넣는다
for (int j = 0; j < a[x].size(); j++) { //연결노드들 확인
int y = a[x][j]; //그 연결노드를 y로 정의
if (--inDegree[y] == 0) //차수를 1뺐을 때 y의 진입차수가 0이되면
q.push(y); //큐에넣는다.
}
}
for (int i = 1; i <= n; i++) {
printf("%d ", result[i]);
}
}
int main() {
int m;
int x, y;
scanf_s("%d %d",&n,&m);
for (int i = 0; i < m; i++) {
scanf_s("%d %d", &x, &y); //input
a[x].push_back(y); //연결
inDegree[y]++; //연결 되는 것의 차수를 1 늘려준다.
}
topologySort();
}
반응형
'알고리즘 문제풀이 > 백준문제풀이' 카테고리의 다른 글
[백준문제풀이] 1948 임계경로 (0) | 2020.12.30 |
---|---|
[백준문제풀이] 1516 게임 개발 (0) | 2020.12.30 |
[백준문제풀이] 15852 타일 채우기 3 (0) | 2020.12.29 |
[백준문제풀이] 2133 타일 채우기 (0) | 2020.12.29 |
[백준문제풀이] 11727 2xn 타일링 2 (0) | 2020.12.29 |