https://www.acmicpc.net/problem/17609
๋ฌธ์
ํ๋ฌธ(ๅๆ) ๋๋ ํฐ๋ฆฐ๋๋กฌ(palindrome)์ ์ ๋ค ๋ฐฉํฅ์ผ๋ก ๋ณผ ๋ ๊ฐ์ ์์์ ๋ฌธ์๋ก ๊ตฌ์ฑ๋ ๋ฌธ์์ด์ ๋งํ๋ค. ์๋ฅผ ๋ค์ด ‘abba’ ‘kayak’, ‘reviver’, ‘madam’์ ๋ชจ๋ ํ๋ฌธ์ด๋ค. ๋ง์ผ ๊ทธ ์์ฒด๋ ํ๋ฌธ์ด ์๋์ง๋ง ํ ๋ฌธ์๋ฅผ ์ญ์ ํ์ฌ ํ๋ฌธ์ผ๋ก ๋ง๋ค ์ ์๋ ๋ฌธ์์ด์ด๋ผ๋ฉด ์ฐ๋ฆฌ๋ ์ด๋ฐ ๋ฌธ์์ด์ “์ ์ฌํ๋ฌธ”(pseudo palindrome)์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์๋ฅผ ๋ค์ด ‘summuus’๋ 5๋ฒ์งธ๋ ํน์ 6๋ฒ์งธ ๋ฌธ์ ‘u’๋ฅผ ์ ๊ฑฐํ์ฌ ‘summus’์ธ ํ๋ฌธ์ด ๋๋ฏ๋ก ์ ์ฌํ๋ฌธ์ด๋ค.
์ฌ๋ฌ๋ถ์ ์ ์๋ ๋ฌธ์์ด์ ๋ถ์ํ์ฌ ๊ทธ๊ฒ์ด ๊ทธ ์์ฒด๋ก ํ๋ฌธ์ธ์ง, ๋๋ ํ ๋ฌธ์๋ฅผ ์ญ์ ํ๋ฉด ํ๋ฌธ์ด ๋๋ “์ ์ฌํ๋ฌธ”์ธ์ง, ์๋๋ฉด ํ๋ฌธ์ด๋ ์ ์ฌํ๋ฌธ๋ ์๋ ์ผ๋ฐ ๋ฌธ์์ด์ธ์ง๋ฅผ ํ๋จํด์ผ ํ๋ค. ๋ง์ผ ๋ฌธ์์ด ๊ทธ ์์ฒด๋ก ํ๋ฌธ์ด๋ฉด 0, ์ ์ฌํ๋ฌธ์ด๋ฉด 1, ๊ทธ ์ธ๋ 2๋ฅผ ์ถ๋ ฅํด์ผ ํ๋ค.
์ ๋ ฅ
์ ๋ ฅ์ ์ฒซ ์ค์๋ ์ฃผ์ด์ง๋ ๋ฌธ์์ด์ ๊ฐ์๋ฅผ ๋ํ๋ด๋ ์ ์ T(1 ≤ T ≤ 30)๊ฐ ์ฃผ์ด์ง๋ค. ๋ค์ ์ค๋ถํฐ T๊ฐ์ ์ค์ ๊ฑธ์ณ ํ ์ค์ ํ๋์ ๋ฌธ์์ด์ด ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ค. ์ฃผ์ด์ง๋ ๋ฌธ์์ด์ ๊ธธ์ด๋ 3 ์ด์ 100,000 ์ดํ์ด๊ณ , ์๋ฌธ ์ํ๋ฒณ ์๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์๋ค.
์ถ๋ ฅ
๊ฐ ๋ฌธ์์ด์ด ํ๋ฌธ์ธ์ง, ์ ์ฌ ํ๋ฌธ์ธ์ง, ๋ ๋ชจ๋ ํด๋น๋์ง ์๋์ง๋ฅผ ํ๋จํ์ฌ ํ๋ฌธ์ด๋ฉด 0, ์ ์ฌ ํ๋ฌธ์ด๋ฉด 1, ๋ ๋ชจ๋ ์๋๋ฉด 2๋ฅผ ์์๋๋ก ํ ์ค์ ํ๋์ฉ ์ถ๋ ฅํ๋ค.
๋ฐฑ์ค ๊ณจ๋5.
์ฒ์์ ๋ฌธ์ ๋ณด๊ณ ํฌํฌ์ธํฐ๋ค~ํ๊ณ ์๊ธฐ์์ํ๊ฒ ์ ์ถํ๋๋ฐ ๋ฐ๋ก ํ๋ ค๋ฒ๋ฆผ ใ .ใ
๋ญ๊ฐ ๋ฌธ์ ์ธ๊ฐ ํ๋๋ฐ
๋ค์ ํ ์คํธ์ผ์ด์ค๋ฅผ ๋๋ ค๋ดค๋๋ ๋ฒ๊ทธ๋ฅผ ๋ฐ๊ฒฌํ ์ ์์๋ค.
2
abbab
babba
๊ธฐ์กด์ ๋ด ์ฝ๋๋ ์ข์ฐ์์ ํ๋์ฉ ๋น๊ตํ๋ฉด์ ๋ค๋ฅธ ๋ฌธ์๋ฅผ ๋ฐ๊ฒฌํ ์,
if(st[left+1]==st[right]) left++;
else if(st[left]==st[right-1]) right--;
์์ ๊ฐ์ด left+1์ด right ๊ณผ ๊ฐ์ ์ํฉ์ ๋จผ์ ์ฒ๋ฆฌํด์ฃผ์๋๋ฐ,
๋ฌธ์ ๋ abbab์ ๊ฐ์ด ๋งจ ๋ค์ ํ ๊ธ์๋ง ๋นผ๋ฉด ํฐ๋ฆฐ๋๋กฌ์ด ๋๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ ์ฌํ๋ฌธ์ผ๋ก ์ธ์์ ๋ชปํ๋ ๊ฑฐ์๋ค.
๊ทธ๋์ ๊ฑ ํจ์๋ก ๋ฐ๋ก ๋บ ๋ค์ cnt ์ธ์๋ฅผ ๋ฃ์ด์ฃผ์ด์ ๋ ๋ฒ ์คํํ๊ณ ์ต์๊ฐ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐํ๋ค!
์ฌ๊ท๋ก ํ๋ฉด ๋ ํจ์จ์ ์ผ ๊ฒ ๊ฐ๊ธดํ๋ฐ.. ์ด๋ ค์์ ๊ทธ๊ฑด ๋ค์์ ^-^
๋์ ํ์ด
#include <iostream>
#include <string>
using namespace std;
int findPalin(string st, int cnt){
int left = 0;
int right = st.length()-1;
int diff = 0;
while(left<=right){
if (st[left] == st[right]){
left++;
right--;
}
else{
diff++;
if(cnt == 1){
if(st[left+1]==st[right]) left++;
else{
diff++;
break;
}
}
if(cnt==2){
if(st[left]==st[right-1]) right--;
else{
diff++;
break;
}
}
}
}
return diff;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
string st = "";
cin >> t;
for (int i = 0; i < t; ++i){
cin >> st;
int first = findPalin(st, 1);
int second = findPalin(st, 2);
int diff = min(first, second);
if(diff==0) cout << 0;
else if(diff==1) cout << 1;
else cout << 2;
cout << "\n";
}
}
'๐ ์๊ณ ๋ฆฌ์ฆ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++/BOJ] 5549 : ํ์ฑ ํ์ฌ (๋์ ํฉ) / ์ฝ์ง ๊ธฐ๋ก (0) | 2023.03.28 |
---|---|
[C++/BOJ] 13423 : Three Dots (์ด์งํ์) / ์ฝ์ง ๊ธฐ๋ก (0) | 2023.03.27 |
[C++/BOJ] 14891 : ํฑ๋๋ฐํด (์๋ฎฌ๋ ์ด์ ) (0) | 2023.03.23 |
[C++/BOJ] 17836 : ๊ณต์ฃผ๋์ ๊ตฌํด๋ผ! (์๋ฎฌ๋ ์ด์ ) / ์ฝ์ง ๊ธฐ๋ก (0) | 2023.03.23 |
[C++/BOJ] 1806 : ๋ถ๋ถํฉ (ํฌํฌ์ธํฐ) (0) | 2023.03.23 |