๐Ÿ’  BOJ/Class 3

[BOJ][C++] ๋ฐฑ์ค€ 18870๋ฒˆ: ์ขŒํ‘œ ์••์ถ•

์„ ๋‹ฌ 2023. 3. 30. 23:11
๋ฐ˜์‘ํ˜•

https://www.acmicpc.net/problem/18870

 

18870๋ฒˆ: ์ขŒํ‘œ ์••์ถ•

์ˆ˜์ง์„  ์œ„์— N๊ฐœ์˜ ์ขŒํ‘œ X1, X2, ..., XN์ด ์žˆ๋‹ค. ์ด ์ขŒํ‘œ์— ์ขŒํ‘œ ์••์ถ•์„ ์ ์šฉํ•˜๋ ค๊ณ  ํ•œ๋‹ค. Xi๋ฅผ ์ขŒํ‘œ ์••์ถ•ํ•œ ๊ฒฐ๊ณผ X'i์˜ ๊ฐ’์€ Xi > Xj๋ฅผ ๋งŒ์กฑํ•˜๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์ขŒํ‘œ์˜ ๊ฐœ์ˆ˜์™€ ๊ฐ™์•„์•ผ ํ•œ๋‹ค. X1, X2, ..., XN์— ์ขŒ

www.acmicpc.net

 

๋ฌธ์ œ

์ˆ˜์ง์„  ์œ„์— N๊ฐœ์˜ ์ขŒํ‘œ X1, X2, ..., XN์ด ์žˆ๋‹ค. ์ด ์ขŒํ‘œ์— ์ขŒํ‘œ ์••์ถ•์„ ์ ์šฉํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

Xi๋ฅผ ์ขŒํ‘œ ์••์ถ•ํ•œ ๊ฒฐ๊ณผ X'i์˜ ๊ฐ’์€ Xi > Xj๋ฅผ ๋งŒ์กฑํ•˜๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์ขŒํ‘œ์˜ ๊ฐœ์ˆ˜์™€ ๊ฐ™์•„์•ผ ํ•œ๋‹ค.

X1, X2, ..., XN์— ์ขŒํ‘œ ์••์ถ•์„ ์ ์šฉํ•œ ๊ฒฐ๊ณผ X'1, X'2, ..., X'N๋ฅผ ์ถœ๋ ฅํ•ด๋ณด์ž.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N์ด ์ฃผ์–ด์ง„๋‹ค.

๋‘˜์งธ ์ค„์—๋Š” ๊ณต๋ฐฑ ํ•œ ์นธ์œผ๋กœ ๊ตฌ๋ถ„๋œ X1, X2, ..., XN์ด ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— X'1, X'2, ..., X'N์„ ๊ณต๋ฐฑ ํ•œ ์นธ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์ถœ๋ ฅํ•œ๋‹ค

 

ํ’€์ด

1. ๋ฐ›์€ ๊ฐ’๋“ค์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ ํ›„ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•œ๋‹ค
2. ์ •๋ ฌํ•œ ๊ฐ’์— ์ˆ˜๋ฅผ ํ• ๋‹นํ•œ๋‹ค (์ž๋ฃŒ๊ตฌ์กฐ map ์‚ฌ์šฉ)
3. ๋ฐ›์€ ๊ฐ’๋“ค์„ ์ˆœํšŒํ•˜๋ฉฐ ํ• ๋‹น๋œ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค

 

์˜ˆ๋ฅผ๋“ค์–ด, ์˜ˆ์ œ 1์ธ ์œ„์— ์ƒํ™ฉ์—์„œ

2 4 -10 4 -9

 ์ด๊ฑธ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ณ  ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๋ฉด {-10, -9, 2, 4} ์ด๋‹ค.

์ˆœ์„œ๋Œ€๋กœ 0๋ถ€ํ„ฐ 3๊นŒ์ง€์˜ ๊ฐ’์„ ํ• ๋‹นํ•˜๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ ๋œ๋‹ค.

map = [{-10, 0}, {-9, 1}, {2, 2}, {4, 4}]

 

์ด์ œ ๋‹ค์‹œ ์›๋ž˜ ์ž…๋ ฅ๊ฐ’ {2, 4, -10, 4, -9} ๋ฅผ ๋Œ๋ฉฐ ํ• ๋‹น๋œ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋ฉด

{2, 4, 0, 4, 1}

 

#include <iostream>
#include <vector>
#include <algorithm>
#include <map>

using namespace std;

int main() {
    int n;
    cin >> n;
    vector<int> input (n);
    vector<int> sortedInput(n);
    for(int i=0; i<n; i++) {
        cin >> input[i];
        sortedInput[i] = input[i];
    }
    
    map<int, int> m;
    int cur = 0;
    sort(sortedInput.begin(), sortedInput.end());
    sortedInput.erase(unique(sortedInput.begin(), sortedInput.end()), sortedInput.end());
    for(int i : sortedInput) {
        m.insert({i,cur});
        cur++;
    }
    vector<int> answer;
    for(int i : input) {
        answer.push_back(m[i]);
    }
    
    for(int i : answer) {
        cout << i << " ";
    }
    
    return 0;
}
๋ฐ˜์‘ํ˜•