Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- C++
- UnrealEngine4
- RootMotion
- directx
- 백준
- GeeksForGeeks
- algorithm
- 언리얼엔진5
- const
- 티스토리챌린지
- UnrealEngine5
- 프로그래머스
- UE5
- 오블완
- DirectX11
- 1563
- C
- winapi
- RVO
- 팰린드롬 만들기
- Programmers
- 2294
- DeferredRendering
- 줄 세우기
- IFileDialog
- baekjoon
- softeer
- NRVO
- Unreal Engine5
- Frustum
Archives
- Today
- Total
Game Develop
[Algorithm] Baekjoon 12904번 : A와 B 본문
https://www.acmicpc.net/problem/12904
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
bool isReversedDirection = false;
deque<char> dq;
string start;
string target;
int startSize = 0;
cin >> start >> target;
for (int i = 0; i < target.size(); ++i)
{
dq.push_back(target[i]);
}
startSize = start.size();
while (1)
{
if (!isReversedDirection)
{
if (dq.back() == 'A')
{
dq.pop_back();
}
else
{
dq.pop_back();
isReversedDirection = !isReversedDirection;
}
}
else
{
if (dq.front() == 'A')
{
dq.pop_front();
}
else
{
dq.pop_front();
isReversedDirection = !isReversedDirection;
}
}
if (dq.size() == startSize)
{
break;
}
}
if (!isReversedDirection)
{
for (int i = 0; i < startSize; ++i)
{
if (start[i] != dq[i])
{
cout << 0;
return 0;
}
}
}
else
{
for (int i = 0; i < startSize; ++i)
{
if (start[i] != dq[startSize - i - 1])
{
cout << 0;
return 0;
}
}
}
cout << 1;
}
|
cs |
문제의 조건에 '추가'만 있을 뿐, '삭제'가 없기에 빠른속도내로 풀 수 있는문제.
그냥 얼추보면은 완전탐색마냥 풀어야 할 것 같지만, 삭제가 없기 때문에 target에서 연산을 역으로 적용하다가 크기가 start랑 같을 떄 비교해서 가능여부를 판단하면 된다. 사실상 루트가 한개다.
문제의 연산에는 뒤집는다...라는 동작이 있지만, reverse라는 동작자체가 O(n)이기 때문에, 보통 실제로 뒤집지는 않고 뒤집은것'처럼' 구현하는 경우가 많다. 따로 bool변수를 선언해서 현재 정방향인지 역방향인지를 표시해주면 된다.
역방향일 경우 문자열의 뒤에서 문자를 빼는게 아니라 앞에서 빼고, 정방향이면 뒤에서 문자를 빼주면 된다.
'Algorithm > Baekjoon' 카테고리의 다른 글
[Algorithm] Baekjoon 1736번 : 쓰레기 치우기 (1) | 2023.03.14 |
---|---|
[Algorithm] Baekjoon 1459번 : 걷기 (0) | 2023.03.14 |
[Algorithm] Baekjoon 12852번 : 1로 만들기 2 (0) | 2023.03.08 |
[Algorithm] Baekjoon 2879번 : 코딩은 예쁘게 (0) | 2023.03.08 |
[Algorithm] Baekjoon 1715번 : 카드 정렬하기 (0) | 2023.03.08 |