백준(BOJ) 문자열 문제집: A와 B(골드 5)
문제 출처: https://www.acmicpc.net/problem/12904
12904번: A와 B
수빈이는 A와 B로만 이루어진 영어 단어가 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다. 이런 사실에 놀란 수
www.acmicpc.net
1. 알고리즘
약간....이렇게 생각할 수 있구나!했던 문제
지금까지 '규칙이 있어. 이 규칙을 사용해서 A로 B를 만들 수 있는지 알아내라' 했던 문제는 완전 탐색(브루트포스)으로 A로 만들 수 있는 경우의 수를 구하고, 그 안에 B가 있는지를 확인하는 방법으로 풀었었다...그런데 반대로 생각하면 아주 간단하다는 걸 알게 되었다...!
규칙을 거꾸로 적용해서 B로 A를 만들 수 있는 지 확인하면 된다는 것...아주 간단하다. 이 문제의 경우 문자열의 맨 뒤에 문자를 추가하는 규칙이기 때문에, 문자열의 맨 뒤 문자를 확인해서 규칙을 역으로 적용해주기만 하면 된다.
- 연산한 T문자열의 길이가 S문자열의 길이와 같을 때까지 반복
- 문제에서 주어진 연산의 역연산을 적용
- 문자열의 맨 뒤가 'A'이면, 'A' 제거
- 문자열의 맨 뒤가 'B'이면, 'B' 제거 후 문자열 뒤집기
- 문제에서 주어진 연산의 역연산을 적용
- 연산한 T문자열과 S문자열이 같으면 '1', 같지 않으면 '0' 출력
2. 유의 사항
3. 어려웠던 점, 해결방법
4. 소스코드
상세 설명은 주석
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
import sys
input_func = sys.stdin.readline
if __name__ == '__main__':
S = str(*map(str, input_func().split()))
T = str(*map(str, input_func().split()))
temp_string = T
while len(S) != len(temp_string): #T연산 문자열이 S와 동일한 길이가 될 때까지 반복
#'A'추가 연산의 역연산
#문자열 맨 뒤가 'A'이면 'A' 제거
if temp_string[-1] == 'A':
temp_string = temp_string[:-1]
#'B'추가 연산의 역연산
#문자열 맨 뒤가 'B'이면 'B' 제거 후 문자열 뒤집기
elif temp_string[-1] == 'B':
temp_string = temp_string[:-1]
temp_string = temp_string[::-1]
#T연산 문자열과 S문자열이 같으면 '1', 같지 않으면 '0' 출력
print('1' if temp_string == S else '0')
|
cs |
5. 고민
'Algorithms > 백준' 카테고리의 다른 글
[백준_16236]아기 상어 with Python, Java (0) | 2021.08.26 |
---|---|
[백준_4358]생태학 with Java (0) | 2021.08.04 |
[백준_2671]잠수함식별 with Python (0) | 2021.06.30 |
[백준_4358]생태학 with Python (0) | 2021.06.24 |
[백준_1013]Contact with Python (0) | 2021.06.24 |
댓글