BOJ 5430. AC
๐โโ๏ธ[Gold V] AC - 5430
์ฑ๋ฅ ์์ฝ
๋ฉ๋ชจ๋ฆฌ: 3428 KB, ์๊ฐ: 36 ms
๋ถ๋ฅ
๋ฑ, ํ์ฑ, ๊ตฌํ, ๋ฌธ์์ด, ์๋ฃ ๊ตฌ์กฐ
์ ์ถ ์ผ์
2023๋ 12์ 25์ผ 17:24:46
๋ฌธ์ ์ค๋ช
์ ์์ด๋ ์ฃผ๋ง์ ํ ์ผ์ด ์์ด์ ์๋ก์ด ์ธ์ด 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๋ฅผ ์ถ๋ ฅํ๋ค.
๐ํ์ด
R์ ๊ฒฝ์ฐ reverse
ํจ์๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค๋ฉด ์๊ฐ์ด๊ณผ๊ฐ ๋๋ค.
๋๋ ํจ์๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ํฌํฌ์ธํธ์๊ณ ๋ฆฌ์ฆ์ ์์ฉํด์ ํ์๋ค.
R์ ํ ๋๋ง๋ค bool rflag
๋ฅผ ๋ณ๊ฒฝํด์ฃผ๋๋ฐ rflag
๊ฐ ์ผ์ ธ์์ผ๋ฉด ๋ค์์๋ถํฐ ์ค์ด๋๋ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๊ณ ๊ทธ๊ฒ ์๋๋ฉด ์์์ ๋ถํฐ ์ฆ๊ฐํ๋ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ค.
if (str[i] == 'R')
{
if (rflag == false)
rflag = true;
else
rflag = false;
//R(vec);
}
์ค์ง์ ์ผ๋ก D
์
๋ ฅ์ด ๋ค์ด์ค๋ฉด ํฌ์ธํฐ๊ฐ ์๋์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ค.
if (str[i] == 'D')
{
if (rflag == false)
{
pos++;
if (pos > rpos + 1)
{
errorFlag = true;
}
}
else
{
rpos--;
if (rpos + 1< pos)
{
errorFlag = true;
}
}
//D(vec);
}
์ด๋ฌธ์ ์์ ์ด๋ ค์ด ์ ์ ๋น ๋ฒกํฐ์ธ ์ํ์์ R๋ฅผ ์ฌ์ฉํด๋ ์๋ฌ๊ฐ ์๋๋ผ๋ ์ ์ด๋ค.
์ด๋ถ๋ถ์ ์ ์ํ๋ฉด์ ๋ฌธ์ ๋ฅผ ํ์ด์ผํ๋ค.
๋์ ๊ฒฝ์ฐ D
๋ฅผ ์ฌ์ฉํ ๋๋ง ์๋ฌ๋ฅผ ๊ฐ์งํ๋ ํ๋ ๊ทธ๋ฅผ ์ธ์์ ํ์๋ค.
ํนํ ์กฐ๊ฑด๋ฌธ์ด ํท๊ฐ๋ฆฌ๋๋ฐ ๊ทธ๋ฅ if (pos > rpos)
๋ฅผ ํ๋ฉด ํ๋ฆฐ๋ค.
์ด๊ฑด ๊ทธ๋ฆผ์ ๊ทธ๋ ค๊ฐ๋ฉด์ ๋ก์ง์ ๋ฐ๋ผ๊ฐ๋๊ฒ ์ดํด๊ฐ ๋น ๋ฅผ๋ฏ
์ด๊ฒ ์ดํด๊ฐ ๋๋ค๋ฉด ์ถ๋ ฅํ ๋๋ if (pos > rpos)
์ผ ๋ ๋ฐ๋ก ]
์ ์ถ๋ ฅํ๋๊ฒ ์ดํด๊ฐ ๋ ๊ฒ์ด๋ค.
๋ฌธ์ ํด๊ฒฐ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
int t, pos = 0, rpos = 0;
bool errorFlag = false;
void solve()
{
cin >> t;
while (t > 0)
{
string str;
cin >> str;
int vsize;
cin >> vsize;
string vstr;
cin >> vstr;
vector<int> vec(vsize);
int vpos = 0, temp = 0;
for (int i = 1; i < vstr.size(); ++i)
{
if (vec.size() == 0)
break;
if (vstr[i] == ',' || vstr[i] == ']')
{
vec[vpos] = temp;
vpos++;
temp = 0;
}
else
{
temp *= 10;
temp += vstr[i] - '0';
}
}
bool rflag = false;
pos = 0, errorFlag = false, rpos = vec.size() - 1;
for (int i = 0; i < str.size(); ++i)
{
if (str[i] == 'R')
{
if (rflag == false)
rflag = true;
else
rflag = false;
//R(vec);
}
if (str[i] == 'D')
{
if (rflag == false)
{
pos++;
if (pos > rpos + 1)
{
errorFlag = true;
}
}
else
{
rpos--;
if (rpos + 1< pos)
{
errorFlag = true;
}
}
//D(vec);
}
if (errorFlag == true)
{
cout << "error" << '\n';
break;
}
}
if (errorFlag == true)
{
t--;
continue;
}
cout << "[";
if (vec.size() == 0 || pos > rpos)
{
cout << "]" << '\n';
}
else if (rflag == false)
{
for (int i = pos; i < rpos; ++i)
{
cout << vec[i] << ",";
}
cout << vec[rpos] << "]" << '\n';
}
else if (rflag == true)
{
for (int i = rpos; i > pos; --i)
{
cout << vec[i] << ",";
}
cout << vec[pos] << "]" << '\n';
}
t--;
}
}
ํ์ฐธ ํค๋งธ์ง๋ง ๊ฒฐ๊ตญ์ ์ค์ค๋ก์ ํ์ผ๋ก ํ์๋ค๊ตฌ~!
๐์ ์ฒด ์ฝ๋
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include<iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
// R์ ๋ค์ง๊ธฐ
// D๋ ๋งจ ์ ๋ฒ๋ฆฌ๊ธฐ
int t, pos = 0, rpos = 0;
bool errorFlag = false;
void solve()
{
cin >> t;
while (t > 0)
{
string str;
cin >> str;
int vsize;
cin >> vsize;
string vstr;
cin >> vstr;
vector<int> vec(vsize);
int vpos = 0, temp = 0;
for (int i = 1; i < vstr.size(); ++i)
{
if (vec.size() == 0)
break;
if (vstr[i] == ',' || vstr[i] == ']')
{
vec[vpos] = temp;
vpos++;
temp = 0;
}
else
{
temp *= 10;
temp += vstr[i] - '0';
}
}
bool rflag = false;
pos = 0, errorFlag = false, rpos = vec.size() - 1;
for (int i = 0; i < str.size(); ++i)
{
if (str[i] == 'R')
{
if (rflag == false)
rflag = true;
else
rflag = false;
//R(vec);
}
if (str[i] == 'D')
{
if (rflag == false)
{
pos++;
if (pos > rpos + 1)
{
errorFlag = true;
}
}
else
{
rpos--;
if (rpos + 1< pos)
{
errorFlag = true;
}
}
//D(vec);
}
if (errorFlag == true)
{
cout << "error" << '\n';
break;
}
}
if (errorFlag == true)
{
t--;
continue;
}
cout << "[";
if (vec.size() == 0 || pos > rpos)
{
cout << "]" << '\n';
}
else if (rflag == false)
{
for (int i = pos; i < rpos; ++i)
{
cout << vec[i] << ",";
}
cout << vec[rpos] << "]" << '\n';
}
else if (rflag == true)
{
for (int i = rpos; i > pos; --i)
{
cout << vec[i] << ",";
}
cout << vec[pos] << "]" << '\n';
}
t--;
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
//freopen("input.txt", "rt", stdin);
solve();
return 0;
}