• toc {:toc}

๋ฌธ์ œ ํ™•์ธํ•˜๊ธฐ

ํ’€์ด

๋ฌธ์ œ ์ดํ•ด๊ฐ€ ์‰ฝ์‚ฌ๋ฆฌ ๋˜์ง€ ์•Š์ง€๋งŒ ์ฐจ๊ทผ์ฐจ๊ทผ ์ฝ์–ด๋ณด๋ฉด ๋‘ ์‹œํ—˜ ์„ฑ์  ๋“ฑ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง€๊ณ , ์–ด๋–ค ์ง€์›์ž A, B๋ฅผ ๋น„๊ตํ–ˆ์„ ๋•Œ A์˜ ๋“ฑ์ˆ˜๊ฐ€ 1, 4 ์ด๊ณ  B์˜ ๋“ฑ์ˆ˜๊ฐ€ 2, 5 ์ธ ๊ฒฝ์šฐ B๋Š” ํ•ฉ๊ฒฉํ•  ์ˆ˜ ์—†๋‹ค. ์ž…๋ ฅ์€ ์„œ๋ฅ˜ ์‹ฌ์‚ฌ ๋“ฑ์ˆ˜, ๋ฉด์ ‘์‹œํ—˜ ๋“ฑ์ˆ˜ ์ˆœ์œผ๋กœ ๋“ค์–ด์˜จ๋‹ค.

  • ๋‘ ์‹œํ—˜ ์„ฑ์ ์„ ๋ชจ๋‘ ๋น„๊ตํ•ด์•ผ ํ•œ๋‹ค. โ‡’ ๋ณต์žกํ•˜๋‹ค.
    • ํ•˜๋‚˜๋ฅผ ๊ณ ์ •์‹œํ‚ค์ž. โ‡’ ์„œ๋ฅ˜ ์‹ฌ์‚ฌ ๋“ฑ์ˆ˜๋ฅผ ์ •๋ ฌํ•œ๋‹ค.
  • ๋ฉด์ ‘์‹œํ—˜์˜ ๋“ฑ์ˆ˜๋ฅผ ๋น„๊ตํ•œ๋‹ค.
    • ์ด์ค‘ for๋ฌธ์„ ์‚ฌ์šฉํ•ด ์„œ๋ฅ˜ ์‹ฌ์‚ฌ ๋“ฑ์ˆ˜ 1๋“ฑ๋ถ€ํ„ฐ N๋“ฑ๊นŒ์ง€ ๋น„๊ตํ•œ๋‹ค.

๋‹ค์Œ์˜ ์•„์ด๋””์–ด๋ฅผ ๊ฐ€์ง„ ์ฑ„ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค.

#include <bits/stdc++.h>
using namespace std;
 
bool compare(const pair<int, int>& a, const pair<int, int>& b){
    return a.first < b.first;
}
 
int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
 
    int T, N, is_pass = 1;
    pair<int, int> rank[100005];
 
    cin >> T;
 
    while(T--){
        int res = 1;
        cin >> N;
        for(int i = 0; i < N; i++){
            cin >> rank[i].first >> rank[i].second;
        }
        sort(rank, rank+N, compare);
 
        for(int i = 1; i < N; i++){
            is_pass = 1;
            for(int j = 0; j < i; j++){
                if(rank[i].second > rank[j].second){
                    is_pass = 0;
                    break;
                }
            }
            if (!is_pass) continue;
            else res++;
        }
        cout << res << '\n';
    }
 
    return 0;
}

ํ•˜์ง€๋งŒ, ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋–ด๋‹ค. N์ด 100,000๊ฐœ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด์ค‘ for๋ฌธ์„ ๋Œ๋ฆด ๊ฒฝ์šฐ ์ตœ์•…์˜ ์ƒํ™ฉ์— ์ด ๋  ์ˆ˜ ์žˆ๋‹ค. j์˜ ๋ฒ”์œ„๋ฅผ i๋ฅผ ์ด์šฉํ•ด ์ œํ•œํ•ด์คฌ์ง€๋งŒ ์ •๋ ฌ๋„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ๊ฐ€ ์‹ถ๋‹ค.

๋•Œ๋ฌธ์— ์ด์ค‘ for๋ฌธ์ด ์•„๋‹Œ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

์ •๋ ฌ์„ ํ•œ ์ƒํƒœ์—์„œ ๋‹ค์‹œ ์ƒ๊ฐํ•ด๋ณด์ž.

์˜ˆ์ œ 1์˜ˆ์ œ 2
1, 41, 4
2, 32, 5
3, 23, 6
4, 14, 2
5, 55, 7
6, 1
7, 3

์˜ˆ์ œ์— ๋‚˜์™€์žˆ๋Š” ์ž…๋ ฅ์„ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋”ฐ๋ผ ๋‚˜๋ˆ  ์ •๋ ฌํ–ˆ๋‹ค. ์œ„์—์„œ ์•„๋ž˜๋กœ ์ˆœ์ฐจ์ ์œผ๋กœ ํ™•์ธํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž.

  • ์˜ˆ์ œ 1์„ ํ™•์ธํ•ด๋ณด์ž.
  1. ๋‘ ๋ฒˆ์งธ ๊ฐ’์€ 3์ด๊ณ , ์ด์ „ ๊ฐ’ 4์™€ ๋น„๊ตํ–ˆ์„ ๋•Œ ๋” ์ž‘๊ธฐ ๋•Œ๋ฌธ์— ํ•ฉ๊ฒฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  2. ์„ธ ๋ฒˆ์งธ ๊ฐ’์€ ๋‘ ๋ฒˆ์งธ ๊ฐ’๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ ๋” ์ž‘๊ธฐ์— ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ•ฉ๊ฒฉ์ด๋‹ค.
  • ์˜ˆ์ œ 2๋ฅผ ํ™•์ธํ•ด๋ณด์ž.
  1. ๋‘ ๋ฒˆ์งธ ๊ฐ’์€ 5์ด๊ณ  ์ฒซ ๋ฒˆ์งธ ๊ฐ’์€ 4์ด๋‹ค. ๋‘ ๋ฒˆ์งธ ๊ฐ’์ด ๋” ํฌ๊ธฐ ๋•Œ๋ฌธ์— ํ•ฉ๊ฒฉํ•˜์ง€ ๋ชปํ•œ๋‹ค.
  2. ์„ธ ๋ฒˆ์งธ ๊ฐ’์„ ๋น„๊ตํ•ด์•ผ ํ•œ๋‹ค. ์ด๋•Œ, ๋‘ ๋ฒˆ์งธ ๊ฐ’์ด ํ†ต๊ณผํ•˜์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ ๋น„๊ตํ•ด์•ผ ํ•  ๋Œ€์ƒ์€ ์—ฌ์ „ํžˆ ์ฒซ๋ฒˆ์งธ ๊ฐ’์ด๋‹ค.

์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด ํ™•์ธํ•œ ๊ฒƒ์€, ์„œ๋ฅ˜ ์‹ฌ์‚ฌ ๋“ฑ์ˆ˜๊ฐ€ ๋†’์€ ์‚ฌ๋žŒ์˜ ๋ฉด์ ‘ ๋“ฑ์ˆ˜์™€ ๋น„๊ตํ•œ๋‹ค๋Š” ๊ฒƒ, ๋น„๊ตํ–ˆ์„ ๋•Œ ํ•ฉ๊ฒฉํ•œ๋‹ค๋ฉด ๋น„๊ต ๋Œ€์ƒ์ด ํ•ฉ๊ฒฉํ•œ ์‚ฌ๋žŒ์œผ๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋•Œ๋ฌธ์— ์ด์— ๋”ฐ๋ผ ์ธ๋ฑ์Šค๋ฅผ ์„ค์ •ํ•ด ๋น„๊ต ๋Œ€์ƒ์„ ๋ณ€๊ฒฝํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

#include <bits/stdc++.h>
using namespace std;
 
bool compare(const pair<int, int>& a, const pair<int, int>& b){
    return a.first < b.first;
}
 
int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
 
    int T, N, is_pass = 1;
    pair<int, int> rank[100005];
 
    cin >> T;
 
    while(T--){
        int res = 1;
        cin >> N;
        for(int i = 0; i < N; i++){
            cin >> rank[i].first >> rank[i].second;
        }
        sort(rank, rank+N, compare);
 
        int idx = 0;
        for(int i = 1; i < N; i++){
            if(rank[i].second < rank[idx].second){
                res++;
                idx = i;
            }
        }
        cout << res << '\n';
    }
 
    return 0;
}