https://www.acmicpc.net/problem/5430
5430๋ฒ: AC
๊ฐ ํ ์คํธ ์ผ์ด์ค์ ๋ํด์, ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ์ ์ ๋ฐฐ์ด์ ํจ์๋ฅผ ์ํํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค. ๋ง์ฝ, ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ์๋ error๋ฅผ ์ถ๋ ฅํ๋ค.
www.acmicpc.net
๋ฌธ์
์ ์์ด๋ ์ฃผ๋ง์ ํ ์ผ์ด ์์ด์ ์๋ก์ด ์ธ์ด AC๋ฅผ ๋ง๋ค์๋ค. AC๋ ์ ์ ๋ฐฐ์ด์ ์ฐ์ฐ์ ํ๊ธฐ ์ํด ๋ง๋ ์ธ์ด์ด๋ค. ์ด ์ธ์ด์๋ ๋ ๊ฐ์ง ํจ์ R(๋ค์ง๊ธฐ)๊ณผ D(๋ฒ๋ฆฌ๊ธฐ)๊ฐ ์๋ค.
ํจ์ R์ ๋ฐฐ์ด์ ์๋ ์์ ์์๋ฅผ ๋ค์ง๋ ํจ์์ด๊ณ , D๋ ์ฒซ ๋ฒ์งธ ์๋ฅผ ๋ฒ๋ฆฌ๋ ํจ์์ด๋ค. ๋ฐฐ์ด์ด ๋น์ด์๋๋ฐ D๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ์๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
ํจ์๋ ์กฐํฉํด์ ํ ๋ฒ์ ์ฌ์ฉํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, "AB"๋ A๋ฅผ ์ํํ ๋ค์์ ๋ฐ๋ก ์ด์ด์ B๋ฅผ ์ํํ๋ ํจ์์ด๋ค. ์๋ฅผ ๋ค์ด, "RDD"๋ ๋ฐฐ์ด์ ๋ค์ง์ ๋ค์ ์ฒ์ ๋ ์๋ฅผ ๋ฒ๋ฆฌ๋ ํจ์์ด๋ค.
๋ฐฐ์ด์ ์ด๊ธฐ๊ฐ๊ณผ ์ํํ ํจ์๊ฐ ์ฃผ์ด์ก์ ๋, ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ํ ์คํธ ์ผ์ด์ค์ ๊ฐ์ T๊ฐ ์ฃผ์ด์ง๋ค. T๋ ์ต๋ 100์ด๋ค.
๊ฐ ํ ์คํธ ์ผ์ด์ค์ ์ฒซ์งธ ์ค์๋ ์ํํ ํจ์ p๊ฐ ์ฃผ์ด์ง๋ค. p์ ๊ธธ์ด๋ 1๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 100,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค.
๋ค์ ์ค์๋ ๋ฐฐ์ด์ ๋ค์ด์๋ ์์ ๊ฐ์ n์ด ์ฃผ์ด์ง๋ค. (0 โค n โค 100,000)
๋ค์ ์ค์๋ [x1,...,xn]๊ณผ ๊ฐ์ ํํ๋ก ๋ฐฐ์ด์ ๋ค์ด์๋ ์ ์๊ฐ ์ฃผ์ด์ง๋ค. (1 โค xi โค 100)
์ ์ฒด ํ ์คํธ ์ผ์ด์ค์ ์ฃผ์ด์ง๋ p์ ๊ธธ์ด์ ํฉ๊ณผ n์ ํฉ์ 70๋ง์ ๋์ง ์๋๋ค.
์ถ๋ ฅ
๊ฐ ํ ์คํธ ์ผ์ด์ค์ ๋ํด์, ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ์ ์ ๋ฐฐ์ด์ ํจ์๋ฅผ ์ํํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค. ๋ง์ฝ, ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ์๋ error๋ฅผ ์ถ๋ ฅํ๋ค.
ํ์ด
๋ค์ ์ค์๋ [x1,...,xn]๊ณผ ๊ฐ์ ํํ๋ก ๋ฐฐ์ด์ ๋ค์ด์๋ ์ ์๊ฐ ์ฃผ์ด์ง๋ค. (1 โค xi โค 100)
์ด ๋ฌธ์ .. ๊ณ์ฐ๊ณผ์ ๋ณด๋ค ์ ๋ ฅ์ด ํจ์ฌ ๋ ๋ํญ์ด์๋ค ใ ใ
์ถ๋ ฅ๋ ์๋๊ณ ์
๋ ฅ์ ์ด๋ ๊ฒ ํ์ ๋ง๋ค์ด์ ์ฃผ๋ ๊ฒฝ์ฐ๋ ์ ๋ง ์ฒ์ ๋ด ์ด์ฉ์ง ์ถ์ฒ๊ฐ ์ ๋ฝ์ด๋๋ผ (?)
๊ทธ๋ฌ๋ค๊ฐ ๋ฐฐ์ด input์ string ์ผ๋ก ๋ฐ๊ณ ํ์๋ฒ์งธ char ๋ง ๋ฑ์ ์ง์ด๋ฃ์ผ๋ฉด ๋๊ฒ์ง ๋ผ๋ ์์ผํ ์๊ฐ์ ํ๋ค
// string ๋ฑ์ ์ ์ฅํ๊ธฐ
for(int i=0; i<n; i++) {
if(i%2 == 0) continue;
else d.push_back(input[i] - '0');
}
์ค๋ก ๋ฉ์ฒญํ ์๊ฐ ๊ทธ ์์ฒด
๋์๋ฆฌ์ ์ด์์ ์ด๋ป๊ฒ ํ ๊ฑด๋ฐ......
๊ทธ๋ฆฌํ์ฌ ์ ๋ง์ ๋ง ๊ท์ฐฎ์์ง๋ง ๋ ธ๊ฐ๋ค๋ฅผ ์์ํ๋ค
์ซ์๊ฐ ๋์ค๋ฉด string์ผ๋ก ์ ์ฅํด์ (3 ๋ค์์ 2๊ฐ ๋์ค๋ฉด ์์๋๋ก "32" ๋ผ๋ ๋ฌธ์์ด์ ๊ฐ๊ฒ๋จ)
์ด string์ int ๋ก ๋ฐ๊ฟ์ ๋ฑ์ ์ ์ฅํด์คฌ๋ค
// string ๋ฑ์ ์ ์ฅํ๊ธฐ
string tmp;
for(int i=0; i<input.length(); i++) {
// 1. ์ฒซ๋ฒ์งธ ๋๊ดํธ๋ ๋ฌด์
if(input[i] == '[') continue;
// 3. ์ฝค๋ง๋ ๋ง์ง๋ง ๋๊ดํธ๊ฐ ๋์ค๋ฉด
if((input[i] == ',' || input[i] == ']') && !tmp.empty()) {
d.push_back(stoi(tmp)); // tmp๊ฐ์ int๋ก ๋ฐํํ์ฌ ๋ฑ์ ์ถ๊ฐํด์ค
tmp.clear(); // ๊ทธ๋ฆฌ๊ณ tmp ์ด๊ธฐํ
}
// 3. ์ซ์๊ฐ ๋์ค๋ฉด ์ผ๋จ tmp์ ๋ฌธ์์ด๋ก ์ ์ฅ
else tmp += input[i];
}
stoi๋ ์ด๋ฒ์ ์ฒ์ ์์๋ค
https://zetawiki.com/wiki/C%2B%2B_string%EC%9D%84_int%EB%A1%9C_%EB%B3%80%ED%99%98
C++ string์ int๋ก ๋ณํ - ์ ํ์ํค
๋ค์ ๋ฌธ์์ด ํฌํจ...
zetawiki.com
์ด์ ๋๋์ด ์ ๋ ฅ์ ๋ฐ์๋ค.
๋ฌธ์ ๋ฅผ ๋ณธ๊ฒฉ์ ์ผ๋ก ํ์ด๋ณด์
R์ reverse ๋์์ด ํฌ์ธํธ๋ค
์ด๊ฑธ ์ง์ง ๋ฐฐ์ด์ ํ๋ ๋ ๋ง๋ค์ด์ ์ ์ฅํ๊ณ .. ์ด๋ฐ์์ผ๋ก ์ง์ง "reverse" ํ ์๊ฐ์ ํ๋ฉด ์๋๋ค
๋ฐ๋ก ์๊ฐ์ด๊ณผํ...
์๋ฐฉํฅ์ธ ๋ฑ์ ์ด์ฉํ๋ฉด ์์ธ๋ก ์ฝ๊ฒ ํ ์ ์๋๋ฐ,
reverse ์ํ๋ฅผ bool (๋๋ int) ํ์ ์ผ๋ก ๊ด๋ฆฌํด์ฃผ๋ฉด์
reverse ์ํ์ผ๋๋ ๋ค์๊ฒ์ pop, reverse ์ํ๊ฐ ์๋๋๋ ์์๊ฒ์ pop ํด์ฃผ๋ฉด
๊ตณ์ด ๊ฑฐ๊พธ๋ก ๋ง๋ค์ง ์์๋ ๊ฑฐ๊พธ๋ก ๋ง๋ "์ฒ" ๋์์ ์ํํ ์ ์๋ค
// Authored by : seondal
// Co-authored by : -
//#include <bits/stdc++.h>
#include <iostream>
#include <deque>
#include <string>
using namespace std;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int t;
cin >> t;
while(t--){
deque<int> d;
string p, input;
int n;
bool isReversed = false, isError = false;
cin >> p >> n >> input;
// string ๋ฑ์ ์ ์ฅํ๊ธฐ
string tmp;
for(int i=0; i<input.length(); i++) {
// 1. ์ฒซ๋ฒ์งธ ๋๊ดํธ๋ ๋ฌด์
if(input[i] == '[') continue;
// 3. ์ฝค๋ง๋ ๋ง์ง๋ง ๋๊ดํธ๊ฐ ๋์ค๋ฉด
if((input[i] == ',' || input[i] == ']') && !tmp.empty()) {
d.push_back(stoi(tmp)); // tmp๊ฐ์ int๋ก ๋ฐํํ์ฌ ๋ฑ์ ์ถ๊ฐํด์ค
tmp.clear(); // ๊ทธ๋ฆฌ๊ณ tmp ์ด๊ธฐํ
}
// 3. ์ซ์๊ฐ ๋์ค๋ฉด ์ผ๋จ tmp์ ๋ฌธ์์ด๋ก ์ ์ฅ
else tmp += input[i];
}
// ํจ์ p ์ํํ๊ธฐ
for(int i=0; i<p.size(); i++){
if(p[i] == 'R') isReversed = !isReversed;
else if(p[i] == 'D'){
// ๋ฑ์ด ๋น์ด์์ผ๋ฉด error
if(d.empty()){
isError = true;
break;
}
// ๋ค์ง๊ธฐ ์ฌ๋ถ์ ๋ฐ๋ผ ๋ฐฉํฅ์ ๋ง๊ฒ ๋ฒ๋ฆฌ๊ธฐ
if(isReversed) d.pop_back();
else d.pop_front();
}
}
// ๋ฑ์ ํ์์ ๋ง๊ฒ ์ถ๋ ฅ
if(isError)
cout << "error\n";
else if (d.empty())
cout << "[]\n";
else {
if(isReversed) {
cout << "[";
for(int j=d.size()-1; j>0; j--) cout << d[j] << ",";
cout << d[0] << "]\n";
} else {
cout << "[";
for(int j=0; j<d.size()-1; j++) cout << d[j] << ",";
cout << d[d.size()-1] << "]\n";
}
}
}
return 0;
}
/*
*/
tmi ) ์ต๊ทผ ํด๋ฆฐ์ฝ๋๋ฅผ ์ฝ๊ณ ์๋๋ฐ... ์ด๋ ๊ฒ ์ฝ๋ ์์ฑํ๋ฉด ์๋๋ค๊ณ ๋ ํ๋๋ฐ.. ์กธ๋ฆฌ๋๊น.. ๋ด์ค..์.. ์ ๋ฐ..
๋ณธ ๊ณ์ฐ์ด ๋๋ฌ๋ค๋ฉด.. ๋ฌผ๋ก ์ถ๋ ฅ๋ ๊ณ ๋์ ์ฐ์์ด์ง๋ง..
์ ๋ ฅ๋งํผ ์ง์ฆ๋์ง๋ ์๋ค.
๋ง์ฝ ํ๋ ธ์ต๋๋ค๊ฐ ๋ด๋๋ฐ ์์ธ์ง ์ด์ ๊ฐ ๋ชจ๋ฅด๊ฒ ๋ค๋ฉด
์๋ง ์ถ๋ ฅ๊ณผ์ ์์ ๋ฌธ์ ๊ฐ ์๊ฒผ์๊ฒ์ด๋ค (๊ฒฝํ๋ดใ )
์๋ ๊ฒฝ์ฐ๋ค์ ๋ฐ์ ธ๋ณด์
(1) ์ถ๋ ฅ๋ reverse ์ํ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์ถ๋ ฅํ๋๊ฐ
(2) ๊ณ์ฐ๊ณผ์ ์์ error ์ธ ๊ฒฝ์ฐ๋ ์ ์ฒ๋ฆฌํด์ ์ถ๋ ฅํ๋๊ฐ
(3) ๋ฐฐ์ด์ด ๋น์ด์์๋ [] ๋ก ์ถ๋ ฅ๋๋๊ฑฐ ๋ง๋๊ฐ
ํนํ 3๋ฒ..
error ๊ฐ ๋จ๋ ๊ฒ๊ณผ๋ ๋ค๋ฅด๊ฒ
๊ทธ๋ฅ ์์ ์ ์ํํ๋๋ฐ ๋ฐฐ์ด์๋ ์๋ฌด๊ฒ๋ ๋จ์์์ง ์๊ฒ ํ๋ ๊ฒฝ์ฐ์ด๋ค
์ฒ์์ ๊ทธ๊ฑฐ ํผ๋ํด์ ๋ต์ด ์๋์๋ค..
'๐ Baaaaaarking > 0x07๊ฐ - ๋ฑ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ P5][C++] 11003๋ฒ: ์ต์๊ฐ ์ฐพ๊ธฐ (0) | 2022.02.25 |
---|---|
[BOJ S4][C++] 1021๋ฒ: ํ์ ํ๋ ํ (0) | 2022.02.21 |