๋์ด๋ | ์ ๋ต๋ฅ |
โ โ | 65.2% |
๋ฌธ์
์ด๋ ํ ์ฐ๊ตฌ๊ฒฐ๊ณผ์ ์ํ๋ฉด ์ด๋ ๋ํ์์ 1๋ฑ์ ํ ์ฌ๋์ ๊ทธ ๋ค์ ๋ํ์์ 2๋ฑ์ ํ ํ๋ฅ ์ด ๋๊ณ , 2๋ฑ์ ํ ์ฌ๋์ ๊ทธ ๋ค์ ๋ํ์์ 1๋ฑ์ ํ ํ๋ฅ ์ด ๋๋ค๊ณ ํฉ๋๋ค.
๋ฑ์๋ฅผ ๋์ดํ ์ด ๋ฌธ์์ด์์ "12"์ "21"์ ๋ถ๋ถ ๋ฌธ์์ด์ด ๊ฐ๊ฐ 1๋ฒ ์ด์ ์กด์ฌํ๋ฉด ์ด ์ฐ๊ตฌ๊ฒฐ๊ณผ๋ ๋ง๋ค๊ณ ํ๋จํ๊ณ , ๊ทธ๋ ์ง ์๋ค๋ฉด ํ๋ฆฌ๋ค๊ณ ํ๋จํฉ๋๋ค. ์๋ฅผ ๋ค์ด, "2112"์ ๊ฒฝ์ฐ 21๊ณผ 12๋ฅผ ๊ฐ๊ฐ ์ฐพ์ ์ ์์ง๋ง, "212"์ ๊ฒฝ์ฐ 21์ ์ฐพ์ผ๋ฉด 12๋ฅผ ๋ชป ์ฐพ๊ณ , 12๋ฅผ ์ฐพ์ผ๋ฉด 21์ ์ฐพ์ง ๋ชปํฉ๋๋ค.
์ฐ๊ตฌ๊ฒฐ๊ณผ๊ฐ ์ฐธ์ด๋ฉด Yes, ๊ฑฐ์ง์ด๋ฉด No๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
ํด๊ฒฐ
key point, string์ ์ ๋ค๋ฃฐ ์ ์์ด์ผ ํ๋ค.
- 12์ ๋จผ์ ์ฐพ์์ ๋ ๊ฒน์น์ง ์๋ ๋ฒ์์์ 21์ ์ฐพ์ผ๋ฉด return 1 → Yes ์ถ๋ ฅ
- 21์ ๋จผ์ ์ฐพ์์ ๋ ๊ฒน์น์ง ์๋ ๋ฒ์์์ 12์ ์ฐพ์ผ๋ฉด return 1 → Yes ์ถ๋ ฅ
- 1, 2๋ฒ ๋ชจ๋ ํด๋น๋์ง ์๋ค๋ฉด No ์ถ๋ ฅ
- func() ํจ์์ ๋จผ์ ์ฐพ์ ์ซ์๋ฅผ ๋ฃ๋๋ค.
- ์์๋ก 12๋ฅผ ๋ฃ์๋ค๋ฉด, findnum์ 12๊ฐ ๋๊ณ findnum2๋ 21์ด ๋๋ค.
- string.find() ํจ์๋ ์ธ์๋ก ๋ค์ด์จ ๋ฌธ์๊ฐ string์์ ์กด์ฌํ๋ฉด ๊ฐ์ฅ ๋จผ์ ์ฐพ์ ๋ฌธ์์ด์ ์์ ์์น๋ฅผ ๋ฐํํ๊ณ ์๋ค๋ฉด string::npos๋ฅผ ๋ฐํํ๋ค. ์ด ํจ์๋ฅผ ์ด์ฉํ์ฌ 12์ ์์์์น๋ฅผ idx๋ณ์์ ์ ์ฅํ๊ณ chk๋ฐฐ์ด์ 12์ ํด๋น๋๋ ์์น์ 1์ ์ ์ฅํ๋ค.
string.substr() ํจ์๋ string.substr(index, length) index๋ถํฐ length๋งํผ string์ ์๋ผ์ ๋ฌธ์์ด์ ๋ฐํํด์ค๋ค.
length๋ฅผ ์ง์ ํ์ง ์์ผ๋ฉด index์์น๋ถํฐ ๋๊น์ง์ ๋ฌธ์์ด์ด ๋ฐํ๋๋ค. - ๊ทธ๋ฆฌ๊ณ 21์ ์ฐพ์์ ๋ ํด๋น ์ธ๋ฑ์ค๊ฐ chk[]๋ฐฐ์ด์ 1๋ก ๋์ด์๋ค๋ฉด 12์ ๊ฒน์น๋ค๋ ์๋ฏธ์ด๋ฏ๋ก ํ์ฌ ์ฐพ์ ๋ฒ์ ์ดํ์ ๋ฌธ์์ด ์ค์์ 21์ ๋ค์ ์ฐพ์๋ณด๊ณ ์๋ค๋ฉด return 1์ ํ๋ค.
- ์ ์ด์ chk[]๋ฐฐ์ด๊ณผ ๋น๊ต๋ฅผ ํ์ ๋ ๊ฒน์น๋ ๋ถ๋ถ์ด ์์๋ค๋ฉด return 1์ด๋ฉฐ, ์ด ์ธ ๋ชจ๋ ๊ฒฝ์ฐ์ ๋ํด์๋ false๊ฐ ๋๋ค.
- 21์ ๋จผ์ ํ์ํ๋ ๊ฒฝ์ฐ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์งํ๋๋ฉฐ func(12), func(21) ๋ ๋ฒ์ ์คํ์์ ํ ๋ฒ์ด๋ผ๋ return 1; ๋ ์ ์ด ์๋ค๋ฉด No๋ฅผ ์ถ๋ ฅํ๋ค.
์ฝ๋
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
#include <iostream>
#include <string.h>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int chk[100005], idx, idx2, findnexti;
string s, ss;
int func(string findnum) {
memset(chk, 0, sizeof(chk));
string findnum2 = findnum == "12" ? "21" : "12";
if (s.find(findnum) != string::npos) {
idx = s.find(findnum);
chk[idx] = 1; chk[idx + 1] = 1;
if (s.find(findnum2) != string::npos) {
idx2 = s.find(findnum2);
if (chk[idx2] || chk[idx2 + 1]) {
if (chk[idx2]) {
chk[idx2 + 1] = 1;
findnexti = idx2 + 1;
}
else {
chk[idx2] = 1;
findnexti = idx + 1;
}
ss = s.substr(findnexti + 1);
if (ss.find(findnum2) != string::npos) {
return 1;
}
}
else {
return 1;
}
}
}
else {
return 0;
}
return 0;
}
int main() {
cin >> s;
if (func("12")) {
printf("Yes");
}
else if (func("21")) {
printf("Yes");
}
else {
printf("No");
}
return 0;
}
|
cs |
๋ ๊ฐ๊ฒฐํ๊ณ ์ฌ์ด ๋ฐฉ๋ฒ
์์๋ณด๊ธฐ ๋ณต์กํ๋ ํจ์๋ด์ฉ์ ์๋์ฒ๋ผ ๊ฐ๋จํ๊ฒ ๋ฐ๊ฟ ์ ์์ต๋๋ค.
- ์ฃผ์ด์ง ๋ฌธ์์ด์ str์ด๋ผ๊ณ ํ์ ๋
- ๋จ์ํ 12์ ์ฐพ์๊ณ , 12์ ์ฐพ๊ณ ๋ ์ดํ ๋ฌธ์์ด์ ๋ํด์ 21์ ์ฐพ์๋ค๋ฉด true
- 21์ ์ฐพ์๊ณ , 21 ์ดํ ๋ฌธ์์ด์ ๋ํด์ 12์ ์ฐพ์๋ค๋ฉด true
- ๊ทธ ์ธ๋ false๋ก ์ทจ๊ธํ์ฌ No๋ฅผ ์ถ๋ ฅํ๋ค.
1
2
3
4
5
|
if (str.find("12") != string::npos && str.substr(str.find("12") + 2).find("21") != string::npos ||
str.find("21") != string::npos && str.substr(str.find("21") + 2).find("12") != string::npos)
cout << "Yes";
else
cout << "No";
|
cs |
์ด๋ ๊ฒ ๋ฌด์กฐ๊ฑด "12"๋ "21"์ ์ฐพ๊ณ ๋ ์ดํ์ substring๋ง ๋ณด๋ฉด ๋๋ ์ด์ ๋
- string.find()ํจ์๊ฐ ์ฒ์์ผ๋ก ์ฐพ์ ๋ฌธ์์ด์ ์ฒซ ๋ฒ์งธ index๋ฅผ ๋ฐํํด์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค.
- 12๊ฐ ๋จผ์ ์์ํ ๊ฒฝ์ฐ, 21์ด ๋จผ์ ์์ํ ๊ฒฝ์ฐ ๋ ๊ฒฝ์ฐ ๋ค ๊ณ ๋ คํ์ฌ ์กฐ๊ฑด์์ ๋ง๋ค์๊ธฐ ๋๋ฌธ์ด๋ค.
์์ ์์ฑํ ์๋ ์ฝ๋์์๋ 21์ ์ฐพ์์ ๊ฒฝ์ฐ ๊ทธ ์์๋ 12๊ฐ ์์ง ์์๊น ์ถ์ด์ ์ฝ๋๊ฐ ๋ณต์กํด์ง๊ณ ๊ธธ์ด์ก๋๋ฐ 12๊ฐ ์์ ์๋ ๊ฒฝ์ฐ๋ ์ด๋ฏธ func(12)์์ ์ฐพ์์ ๊ฒ์ด๊ณ 21์ ์ฐพ์๋ค๋ฉด ๊ทธ ์ดํ substring์ ๋ํด์๋ง ์๊ฐํ๋ฉด ๋์๋ค.
๊ทธ๋์ ๋ค์ ์๊ฐํ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ๊ฒฐํ๊ฒ ์ฝ๋๋ฅผ ๊ตฌ์ฑํด๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
'๐ฅ PS(Problem Solving) ๐ฅ > goorm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๊ตฌ๋ฆLEVEL] ์ด๋ ค์ด ๋ฌธ์ (0) | 2020.03.16 |
---|---|
[๊ตฌ๋ฆLEVEL] ์ํฌ์ ๋ฒ์ค (0) | 2020.03.16 |
[๊ตฌ๋ฆLEVEL] ํต์ ๋น ๊ณ์ฐํ๊ธฐ (0) | 2020.03.12 |
[๊ตฌ๋ฆLEVEL] ๊ทผ๋ฌต์ํ (0) | 2020.03.12 |
[๊ตฌ๋ฆLEVEL] ํน์ ๋ฌธ์ ๊ฐ์ ๊ตฌํ๊ธฐ (0) | 2019.07.18 |
๋๊ธ