Skip to main content
  1. Posts/
  2. Algorithm/

BOJ 10775 공항

·145 words·1 min
Jiho Kim
Author
Jiho Kim
달려 또 달려

📝 문제 정보
#

🧐 관찰 및 접근
#

  • 1번 게이트가 제일 쓰기 좋아보인다.
  • 그러므로 1번 게이트를 아낀다고 생각하면, 모든 비행기를 도킹시킬때 갈 수 있는 최댓값으로 도킹시키면 되는 것 같다.
    • 이를 나이브하게 구현하면 한번당 $O(G)$가 걸릴 것이다.
      100000
      100000
      100000
      100000
      100000
      ...
      • 과 같은 테스트케이스를 생각해보면 된다.
  • 따라서 $\text{calc}(g_i) = g_i$ 보다 작거나 같은 살아있는 게이트의 최댓값을 빠르게 찾으면 된다.
    • 이는 유니온파인드로 빠르게 수행 가능하다!
    • merge할때 자신보다 작은 값을 가리키게 하자.

💻 풀이
#

  • 코드 (C++):
void solve(){
    int G, P; cin >> G >> P;
    UF.init(G+1);
    int ans = 0;
    while(P--){
        int g; cin >> g;
        int rt = UF.find(g);
        if(rt == 0) break;
        UF.merge(rt, rt-1);
        ans++;
    }
    cout << ans << "\n";
}
🔒

구현 코드 잠금

아래 쿠팡 링크를 방문하시면 코드가 공개됩니다.
광고 수익이 블로그 운영에 도움이 됩니다 🙏

🛒 쿠팡 방문하고 코드 보기

방문 후 잠금이 자동으로 해제됩니다