๐ ๊ณต๋ถํ๋ ์ง์ง์ํ์นด๋ ์ฒ์์ด์ง?
[BAEKJOON C++] 2902_KMP๋ ์ KMP์ผ๊น? ๋ณธ๋ฌธ
728x90
๋ฐ์ํ
KMP ์๊ณ ๋ฆฌ์ฆ์ด KMP์ธ ์ด์ ๋ ์ด๋ฅผ ๋ง๋ ์ฌ๋์ ์ฑ์ด Knuth, Morris, Prett์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ ๊ฒ ์๊ณ ๋ฆฌ์ฆ์๋ ๋ฐ๊ฒฌํ ์ฌ๋์ ์ฑ์ ๋ฐ์ ์ด๋ฆ์ ๋ถ์ด๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
๋ ๋ค๋ฅธ ์๋ก, ์ ๋ช ํ ๋น๋์นญ ์ํธํ ์๊ณ ๋ฆฌ์ฆ RSA๋ ์ด๋ฅผ ๋ง๋ ์ฌ๋์ ์ด๋ฆ์ด Rivest, Shamir, Adleman์ด๋ค.
์ฌ๋๋ค์ ์ด๋ ๊ฒ ์ฌ๋ ์ฑ์ด ๋ค์ด๊ฐ ์๊ณ ๋ฆฌ์ฆ์ ๋ ๊ฐ์ง ํํ๋ก ๋ถ๋ฅธ๋ค.
์ฒซ ๋ฒ์งธ๋ ์ฑ์ ๋ชจ๋ ์ฐ๊ณ , ์ด๋ฅผ ํ์ดํ(-)์ผ๋ก ์ด์ด ๋ถ์ธ ๊ฒ์ด๋ค.
์๋ฅผ ๋ค๋ฉด, Knuth-Morris-Pratt์ด๋ค. ์ด๊ฒ์ ๊ธด ํํ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
๋ ๋ฒ์งธ๋ก ์งง์ ํํ๋ ๋ง๋ ์ฌ๋์ ์ฑ์ ์ฒซ ๊ธ์๋ง ๋ฐ์ ๋ถ๋ฅด๋ ๊ฒ์ด๋ค.
์๋ฅผ ๋ค๋ฉด, KMP์ด๋ค.
๋ํ์ด๋ ๋งค์ผ๋งค์ผ ์์ ์ด ํ ์ผ์ ๋ชจ๋ ๋ฉ๋ชจ์ฅ์ ์ ์ด๋๋๋ค.
์ ์ ์๊ธฐ ์ ์, ์ค๋ ํ๋ฃจ ๋ฌด์์ ํ๋์ง ๋์๊ฒจ ๋ณด๋ ๊ฒ์ผ๋ก ํ๋ฃจ๋ฅผ ๋ง๊ฐํ๋ค.
ํ๋ฃจ๋ ์ด ๋ฉ๋ชจ๋ฅผ ๋ณด๋ ์ค, ์ง๊ธ๊น์ง ๊ธด ํํ์ ์งง์ ํํ๋ฅผ ์์ด์ ์ ์ด ๋์ ๊ฒ์ ๋ฐ๊ฒฌํ๋ค.
์ด๋ ๊ฒ ๊ธด ํํ๋ก ํ๋ฃจ ์ผ์ ๊ธฐ๋กํ๋ค๊ฐ๋ ๋ฉ๋ชจ์ฅ ๊ฐ๊ฒฉ์ด ๋ถ๋ด๋์ด ํ์ฐ๋ ๊ฒ์ด ๋ปํ๊ธฐ ๋๋ฌธ์,
์์ผ๋ก๋ ์งง์ ํํ๋ก ๊ธฐ๋กํ๋ ค๊ณ ํ๋ค.
๊ธด ํํ์ ์๊ณ ๋ฆฌ์ฆ ์ด๋ฆ์ด ์ฃผ์ด์ก์ ๋, ์ด๋ฅผ ์งง์ ํํ๋ก ๋ฐ๊พธ์ด ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค
์ ๋ ฅ
์ ๋ ฅ์ ํ ์ค๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ ,
์ต๋ 100๊ธ์์ ์์ด ์ํ๋ฒณ ๋๋ฌธ์, ์๋ฌธ์, ๊ทธ๋ฆฌ๊ณ ํ์ดํ ('-', ์์คํค์ฝ๋ 45)๋ก๋ง ์ด๋ฃจ์ด์ ธ ์๋ค.
์ฒซ ๋ฒ์งธ ๊ธ์๋ ํญ์ ๋๋ฌธ์์ด๋ค. ๊ทธ๋ฆฌ๊ณ , ํ์ดํ ๋ค์๋ ๋ฐ๋์ ๋๋ฌธ์์ด๋ค.
๊ทธ ์ธ์ ๋ชจ๋ ๋ฌธ์๋ ๋ชจ๋ ์๋ฌธ์์ด๋ค.
์ถ๋ ฅ
์ฒซ ์ค์ ์งง์ ํํ ์ด๋ฆ์ ์ถ๋ ฅํ๋ค.
// [2902] KMP๋ ์ KMP์ผ๊น?
/*
KMP ์๊ณ ๋ฆฌ์ฆ์ด KMP์ธ ์ด์ ๋ ์ด๋ฅผ ๋ง๋ ์ฌ๋์ ์ฑ์ด Knuth, Morris, Prett์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ ๊ฒ ์๊ณ ๋ฆฌ์ฆ์๋ ๋ฐ๊ฒฌํ ์ฌ๋์ ์ฑ์ ๋ฐ์ ์ด๋ฆ์ ๋ถ์ด๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
๋ ๋ค๋ฅธ ์๋ก, ์ ๋ช
ํ ๋น๋์นญ ์ํธํ ์๊ณ ๋ฆฌ์ฆ RSA๋ ์ด๋ฅผ ๋ง๋ ์ฌ๋์ ์ด๋ฆ์ด Rivest, Shamir, Adleman์ด๋ค.
์ฌ๋๋ค์ ์ด๋ ๊ฒ ์ฌ๋ ์ฑ์ด ๋ค์ด๊ฐ ์๊ณ ๋ฆฌ์ฆ์ ๋ ๊ฐ์ง ํํ๋ก ๋ถ๋ฅธ๋ค.
์ฒซ ๋ฒ์งธ๋ ์ฑ์ ๋ชจ๋ ์ฐ๊ณ , ์ด๋ฅผ ํ์ดํ(-)์ผ๋ก ์ด์ด ๋ถ์ธ ๊ฒ์ด๋ค.
์๋ฅผ ๋ค๋ฉด, Knuth-Morris-Pratt์ด๋ค. ์ด๊ฒ์ ๊ธด ํํ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
๋ ๋ฒ์งธ๋ก ์งง์ ํํ๋ ๋ง๋ ์ฌ๋์ ์ฑ์ ์ฒซ ๊ธ์๋ง ๋ฐ์ ๋ถ๋ฅด๋ ๊ฒ์ด๋ค.
์๋ฅผ ๋ค๋ฉด, KMP์ด๋ค.
๋ํ์ด๋ ๋งค์ผ๋งค์ผ ์์ ์ด ํ ์ผ์ ๋ชจ๋ ๋ฉ๋ชจ์ฅ์ ์ ์ด๋๋๋ค.
์ ์ ์๊ธฐ ์ ์, ์ค๋ ํ๋ฃจ ๋ฌด์์ ํ๋์ง ๋์๊ฒจ ๋ณด๋ ๊ฒ์ผ๋ก ํ๋ฃจ๋ฅผ ๋ง๊ฐํ๋ค.
ํ๋ฃจ๋ ์ด ๋ฉ๋ชจ๋ฅผ ๋ณด๋ ์ค, ์ง๊ธ๊น์ง ๊ธด ํํ์ ์งง์ ํํ๋ฅผ ์์ด์ ์ ์ด ๋์ ๊ฒ์ ๋ฐ๊ฒฌํ๋ค.
์ด๋ ๊ฒ ๊ธด ํํ๋ก ํ๋ฃจ ์ผ์ ๊ธฐ๋กํ๋ค๊ฐ๋ ๋ฉ๋ชจ์ฅ ๊ฐ๊ฒฉ์ด ๋ถ๋ด๋์ด ํ์ฐ๋ ๊ฒ์ด ๋ปํ๊ธฐ ๋๋ฌธ์,
์์ผ๋ก๋ ์งง์ ํํ๋ก ๊ธฐ๋กํ๋ ค๊ณ ํ๋ค.
๊ธด ํํ์ ์๊ณ ๋ฆฌ์ฆ ์ด๋ฆ์ด ์ฃผ์ด์ก์ ๋, ์ด๋ฅผ ์งง์ ํํ๋ก ๋ฐ๊พธ์ด ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค
์
๋ ฅ
์
๋ ฅ์ ํ ์ค๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ ,
์ต๋ 100๊ธ์์ ์์ด ์ํ๋ฒณ ๋๋ฌธ์, ์๋ฌธ์, ๊ทธ๋ฆฌ๊ณ ํ์ดํ ('-', ์์คํค์ฝ๋ 45)๋ก๋ง ์ด๋ฃจ์ด์ ธ ์๋ค.
์ฒซ ๋ฒ์งธ ๊ธ์๋ ํญ์ ๋๋ฌธ์์ด๋ค. ๊ทธ๋ฆฌ๊ณ , ํ์ดํ ๋ค์๋ ๋ฐ๋์ ๋๋ฌธ์์ด๋ค.
๊ทธ ์ธ์ ๋ชจ๋ ๋ฌธ์๋ ๋ชจ๋ ์๋ฌธ์์ด๋ค.
์ถ๋ ฅ
์ฒซ ์ค์ ์งง์ ํํ ์ด๋ฆ์ ์ถ๋ ฅํ๋ค.
*/
#define _CRT_SECURE_NO_WARNINGS
// ํ์ค ์คํธ๋ฆผ์์ ์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ๋ฅผ ์ ์ดํ๋ ๊ฐ์ฒด๋ฅผ ์ ์ธ
#include <iostream>
#include <algorithm> // find
#include <string>
#include <cmath> // abs
#include <vector>
#include <queue>
using namespace std;
int main() {
string str;
cin >> str;
vector<char> vec;
for (int i = 0; i < str.length(); i++) {
if (str[i] == '-') {
// ์์ด ์ํ๋ฒณ ๋๋ฌธ์, ์๋ฌธ์, ๊ทธ๋ฆฌ๊ณ ํ์ดํ ('-', ์์คํค์ฝ๋ 45)๋ก๋ง ์ด๋ฃจ์ด์ ธ ์๋ค
vec.push_back(str[i + 1]);
}
}
// ๋ฌธ์์ด์ ์ฒซ๋ฒ์งธ ๋ฌธ์
cout << str[0];
// ๋ฌธ์์ด์ '-' ๋ค์ ๋ฌธ์๋ค
for (int i = 0; i < vec.size(); i++) {
cout << vec[i];
}
return 0;
}
728x90
๋ฐ์ํ
'๐ฆฅ ์ฝํ > BAEKJOON' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BAEKJOON C++] 11170_0์ ๊ฐ์ (0) | 2023.08.15 |
---|---|
[BAEKJOON C++] 1357_๋ค์งํ ๋ง์ (0) | 2023.08.15 |
[BAEKJOON C++] 2693_N๋ฒ์งธ ํฐ ์ (0) | 2023.08.15 |
[BAEKJOON C++] 2309_์ผ๊ณฑ ๋์์ด (0) | 2023.08.14 |
[BAEKJOON C++] 1037_์ฝ์ (0) | 2023.08.14 |
Comments