https://www.acmicpc.net/problem/1966
๋ฌธ์
์ฌ๋ฌ๋ถ๋ ์๋ค์ํผ ์ฌ๋ฌ๋ถ์ ํ๋ฆฐํฐ ๊ธฐ๊ธฐ๋ ์ฌ๋ฌ๋ถ์ด ์ธ์ํ๊ณ ์ ํ๋ ๋ฌธ์๋ฅผ ์ธ์ ๋ช ๋ น์ ๋ฐ์ ‘์์๋๋ก’, ์ฆ ๋จผ์ ์์ฒญ๋ ๊ฒ์ ๋จผ์ ์ธ์ํ๋ค. ์ฌ๋ฌ ๊ฐ์ ๋ฌธ์๊ฐ ์์ธ๋ค๋ฉด Queue ์๋ฃ๊ตฌ์กฐ์ ์์ฌ์ FIFO - First In First Out - ์ ๋ฐ๋ผ ์ธ์๊ฐ ๋๊ฒ ๋๋ค. ํ์ง๋ง ์๊ทผ์ด๋ ์๋ก์ด ํ๋ฆฐํฐ๊ธฐ ๋ด๋ถ ์ํํธ์จ์ด๋ฅผ ๊ฐ๋ฐํ์๋๋ฐ, ์ด ํ๋ฆฐํฐ๊ธฐ๋ ๋ค์๊ณผ ๊ฐ์ ์กฐ๊ฑด์ ๋ฐ๋ผ ์ธ์๋ฅผ ํ๊ฒ ๋๋ค.
- ํ์ฌ Queue์ ๊ฐ์ฅ ์์ ์๋ ๋ฌธ์์ ‘์ค์๋’๋ฅผ ํ์ธํ๋ค.
- ๋๋จธ์ง ๋ฌธ์๋ค ์ค ํ์ฌ ๋ฌธ์๋ณด๋ค ์ค์๋๊ฐ ๋์ ๋ฌธ์๊ฐ ํ๋๋ผ๋ ์๋ค๋ฉด, ์ด ๋ฌธ์๋ฅผ ์ธ์ํ์ง ์๊ณ Queue์ ๊ฐ์ฅ ๋ค์ ์ฌ๋ฐฐ์น ํ๋ค. ๊ทธ๋ ์ง ์๋ค๋ฉด ๋ฐ๋ก ์ธ์๋ฅผ ํ๋ค.
์๋ฅผ ๋ค์ด Queue์ 4๊ฐ์ ๋ฌธ์(A B C D)๊ฐ ์๊ณ , ์ค์๋๊ฐ 2 1 4 3 ๋ผ๋ฉด C๋ฅผ ์ธ์ํ๊ณ , ๋ค์์ผ๋ก D๋ฅผ ์ธ์ํ๊ณ A, B๋ฅผ ์ธ์ํ๊ฒ ๋๋ค.
์ฌ๋ฌ๋ถ์ด ํ ์ผ์, ํ์ฌ Queue์ ์๋ ๋ฌธ์์ ์์ ์ค์๋๊ฐ ์ฃผ์ด์ก์ ๋, ์ด๋ค ํ ๋ฌธ์๊ฐ ๋ช ๋ฒ์งธ๋ก ์ธ์๋๋์ง ์์๋ด๋ ๊ฒ์ด๋ค. ์๋ฅผ ๋ค์ด ์์ ์์์ C๋ฌธ์๋ 1๋ฒ์งธ๋ก, A๋ฌธ์๋ 3๋ฒ์งธ๋ก ์ธ์๋๊ฒ ๋๋ค.
์ ๋ ฅ
์ฒซ ์ค์ ํ ์คํธ์ผ์ด์ค์ ์๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ ํ ์คํธ์ผ์ด์ค๋ ๋ ์ค๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
ํ ์คํธ์ผ์ด์ค์ ์ฒซ ๋ฒ์งธ ์ค์๋ ๋ฌธ์์ ๊ฐ์ N(1 ≤ N ≤ 100)๊ณผ, ๋ช ๋ฒ์งธ๋ก ์ธ์๋์๋์ง ๊ถ๊ธํ ๋ฌธ์๊ฐ ํ์ฌ Queue์์ ๋ช ๋ฒ์งธ์ ๋์ฌ ์๋์ง๋ฅผ ๋ํ๋ด๋ ์ ์ M(0 ≤ M < N)์ด ์ฃผ์ด์ง๋ค. ์ด๋ ๋งจ ์ผ์ชฝ์ 0๋ฒ์งธ๋ผ๊ณ ํ์. ๋ ๋ฒ์งธ ์ค์๋ N๊ฐ ๋ฌธ์์ ์ค์๋๊ฐ ์ฐจ๋ก๋๋ก ์ฃผ์ด์ง๋ค. ์ค์๋๋ 1 ์ด์ 9 ์ดํ์ ์ ์์ด๊ณ , ์ค์๋๊ฐ ๊ฐ์ ๋ฌธ์๊ฐ ์ฌ๋ฌ ๊ฐ ์์ ์๋ ์๋ค.
์ถ๋ ฅ
๊ฐ ํ ์คํธ ์ผ์ด์ค์ ๋ํด ๋ฌธ์๊ฐ ๋ช ๋ฒ์งธ๋ก ์ธ์๋๋์ง ์ถ๋ ฅํ๋ค.
ํ์ด
๋ฌธ์ ์๋ ํ๋ผ๊ณ ๋์ด์์ง๋ง ๋ฌธ์ ์ฒ๋ผ ์์ผ๋ก ๊บผ๋ด์ ๋ค๋ก ๋ณด๋ด๋ ์์ ์ ํ ๋ ํ์๋ ๋ฑ์ ์ฌ์ฉํ๋ค (ํ๋ฅผ ์ด์ฉํด๋ ๋ฌด๋ฐฉ)
์ด๋ ์์๊ฐ ๋ฐ๋๋ฉด ๋งจ์ฒ์์ ๋ช๋ฒ์งธ ๋ฌธ์์๋์ง๋ฅผ ์ ์์๊ฒ ๋๊ธฐ ๋๋ฌธ์
์ ๋ ฅ์ ๋ฐ์ ํ์ ๋ฃ์ ๋ pair ํ์ ์ ์ด์ฉํ์ฌ ๋ช๋ฒ์งธ ์ธ์ง๋ฅผ ํจ๊ป ๋ฃ์ด์คฌ๋ค
d[i] = {a,b} -> ๊ฐ์ค์น๊ฐ a์ธ b๋ฒ์งธ ๋ฌธ์
๊ทธ๋ฆฌ๊ณ ์ ๋ ฅ๋ฐ์ ๊ฐ์ค์น๋ค์ ๋ฒกํฐ์ ํจ๊ป ๋ฃ๊ณ ์ด๋ฅผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ์ฌ ๊ฐ์ค์น๋ค์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ป์๋ค
typedef pair<int,int> ci;
int main() {
int t;
cin >> t;
while(t--) {
int n, m;
cin >> n >> m;
deque<ci>d;
vector<int> value;
for(int i=0; i<n; i++) {
int input;
cin >> input;
d.push_back({input, i});
value.push_back(input);
}
์ด์ ์ด ๋ฒกํฐ๋ฅผ ๋๋ฉด์ ํ์ฌ ๊ฐ์ค์น(ํ์ฌ ๊ฐ์ค์น ์ค ์ต๋๊ฐ)์ ๊ฐ์ ๊ฐ์ด ํ์ front์ ์ฌ ๋๊น์ง ๋๋ฆฐ๋ค
๋ณธ๊ฒฉ์ ์ผ๋ก ๋ฌธ์ ์ ๋์จ ํ๋ฆฐํฐ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๋ถ๋ถ์ด๋ค
for(int i=0; i<n; i++) {
while(d.front().first != value[i]) {
ci tmp = d.front();
d.push_back(tmp);
d.pop_front();
}
๊ทธ๋ฌ๋ค๊ฐ ์ต๋ ๊ฐ์ค์น๊ฐ ๋งจ ์์ ์ค๋ฉด ๋๋ฆฌ๋๊ฑธ ๋ฉ์ถ๊ณ ์ธ์(d.pop_front())ํ๋ค
์ด๋ ์ธ์ํ ๋ฌธ์์ ๋ฒํธ = d.front().second ๊ฐ m๊ณผ ๊ฐ์ผ๋ฉด ์ฒ์ m๋ฒ์งธ ๋ฌธ์๊ฐ ์ธ์๋๋๊ฑฐ๋ผ๊ณ ๋ณผ ์ ์๋ค
๊ทธ๋ผ ํ์ฌ์ ์ธ์ ์์๋ฅผ ans์ ๋ฃ๊ณ ๋ง์ง๋ง์ ์ถ๋ ฅํ๋ฉด ๋๊ฒ ๋ค
ci tmp = d.front();
d.pop_front();
if(tmp.second == m) {
ans = i+1;
}
}
์ฝ๋
// ํ์ด : https://whkakrkr.tistory.com
#include <iostream>
#include <deque>
#include <vector>
#include <algorithm>
using namespace std;
typedef pair<int,int> ci;
int main() {
int t;
cin >> t;
while(t--) {
int n, m;
cin >> n >> m;
deque<ci>d;
vector<int> value;
for(int i=0; i<n; i++) {
int input;
cin >> input;
d.push_back({input, i});
value.push_back(input);
}
int ans;
sort(value.begin(), value.end(), greater<>());
for(int i=0; i<n; i++) {
while(d.front().first != value[i]) {
ci tmp = d.front();
d.push_back(tmp);
d.pop_front();
}
ci tmp = d.front();
d.pop_front();
if(tmp.second == m) {
ans = i+1;
}
}
cout << ans << "\n";
}
}
'๐๏ธ ICPC Sinchon > Linear Data Structure' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][C++] ๋ฐฑ์ค 17299๋ฒ: ์ค๋ฑํฐ์ (0) | 2023.05.25 |
---|---|
[BOJ][C++] ๋ฐฑ์ค 1918๋ฒ: ํ์ ํ๊ธฐ์ (0) | 2023.05.24 |
[BOJ][C++] ๋ฐฑ์ค 20301๋ฒ: ๋ฐ์ ์์ธํธ์ค (0) | 2023.04.08 |
[BOJ S1][C++] ๋ฐฑ์ค 4889๋ฒ : ์์ ์ ์ธ ๋ฌธ์์ด (0) | 2022.09.14 |
[BOJ S3][C++] ๋ฐฑ์ค 18115๋ฒ : ์นด๋ ๋๊ธฐ (0) | 2022.09.12 |