2018. 5. 8. 16:37, 알고리즘/BOJ
https://www.acmicpc.net/problem/9938
Union-Find를 이용해 풀이가 가능합니다. parent[i]에, i가 차있을 경우 대신 쓸 수 있는 다른 drawer의 번호를 담아둡니다. 그러면 입력받은 A, B에 대해 A와 B가 모두 비어있지 않을 경우 find(A)와 find(B)를 확인하면 됩니다.(이 때 경로압축 또한 해주어야 합니다.)
이 문제에서 독특하게 배워간 것이 있는데, cin과 cout을 번갈아 쓰게 되면 buffer를 계속 비우기때문에 시간 초과가 발생합니다. 이를 막기 위해 cin과 cout의 동기화를 추가로 끊어야합니다. 즉 ios::sync_with_stdio(false); 에 cin.tie(0); 까지 두어야 입출력 시간으로 인한 시간 초과를 막을 수 있습니다.
'알고리즘 > BOJ' 카테고리의 다른 글
[BOJ] 10775번: Gates (0) | 2018.05.09 |
---|---|
[BOJ] 1202번: LOPOV (0) | 2018.05.09 |
[BOJ] 1781번: 컵라면 (0) | 2018.05.08 |
[BOJ] 3033번: DVAPUT (0) | 2018.05.08 |
[BOJ] 1715번: 카드 정렬하기 (0) | 2018.05.03 |
[BOJ] 7662번: Dual Priority Queue (0) | 2018.05.03 |
Comments