๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm ๐Ÿง‘๐Ÿป‍๐Ÿ’ป/๋ฐฑ์ค€(BOJ)

[๋ฐฑ์ค€,c++] 19637๋ฒˆ - IF๋ฌธ ์ข€ ๋Œ€์‹  ์จ์ค˜

by ์•ˆ์ฃผํ˜• 2022. 8. 2.

๋ฌธ์ œ

 

19637๋ฒˆ: IF๋ฌธ ์ข€ ๋Œ€์‹  ์จ์ค˜

์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” ์นญํ˜ธ์˜ ๊ฐœ์ˆ˜ N (1 ≤ N ≤ 105)๊ณผ ์นญํ˜ธ๋ฅผ ์ถœ๋ ฅํ•ด์•ผ ํ•˜๋Š” ์บ๋ฆญํ„ฐ๋“ค์˜ ๊ฐœ์ˆ˜ M (1 ≤ M ≤ 105)์ด ๋นˆ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N, M ≤ 105) ๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ๊ฐ ์นญ

www.acmicpc.net

 

์ฝ”๋“œ

#include <iostream>
#include <map>

using namespace std;

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    int N, M; cin>>N>>M;
    multimap<int, string> m;
    for(int i=0; i<N; i++){
        string a; int b;
        cin>>a>>b;
        m.insert({b,a});
    }
    
    for(int i=0; i<M; i++){
        int inp; cin>>inp;
        cout<< (m.lower_bound(inp)) ->second <<'\n';
    }
    
}

 

ํ’€์ด

ํ•ด๋‹น ์ฃผ์–ด์ง€๋Š” ์ž…๋ ฅ๊ฐ’์ด ์–ด๋Š ๋ฒ”์œ„์— ์†ํ•˜๋Š”์ง€ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. 

10^5๊นŒ์ง€ ์ž…๋ ฅ์ด ๋“ค์–ด์˜ค๊ธฐ์— O(N^2)์œผ๋กœ ํ’€๋ฉด ์‹œ๊ฐ„ ์•ˆ์— ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์–ด binary search๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ’€์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ €๋Š” map์„ ์ด์šฉํ•ด์„œ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

  1. key๋ฅผ ์ „ํˆฌ๋ ฅ ์ƒํ•œ ๊ฐ’, value๋ฅผ ์นญํ˜ธ๋กœ ํ•˜์—ฌ multimap์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  2. multimap์„ ์‚ฌ์šฉ ํ•œ ์ด์œ ๋Š” ์˜ˆ์ œ ์ž…๋ ฅ 2๋ฒˆ์—์„œ ๋™์ผํ•œ ์ƒํ•œ ๊ฐ’์ด ๋“ค์–ด์˜ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
  3. unordered_map์˜ ๊ฒฝ์šฐ๋Š” hash๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ์ง€๋งŒ ์ผ๋ฐ˜ map๊ณผ multimap์€ ๋ ˆ๋“œ ๋ธ”๋ž™ ํŠธ๋ฆฌ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ์–ด์„œ binarysearch ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  4. lower_bound๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๋‹น ์ž…๋ ฅ๊ฐ’๋ณด๋‹ค ์ฒ˜์Œ์œผ๋กœ ๊ฐ™๊ฑฐ๋‚˜ ๋†’์€ ๊ฐ’์˜ ์นญํ˜ธ๋ฅผ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€