일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 파이썬
- 그리디알고리즘
- 큐
- DFS
- 너비우선탐색
- 백준
- 코테
- 문제풀이
- 수학
- 정렬
- solvedac
- 알고리즘
- 데이터마이닝
- Datastructure
- PYTHON
- greedy
- 반복문
- DP알고리즘
- BFS
- 문자열
- 그래프
- 다이나믹프로그래밍
- 자료구조
- 그리디
- Baekjoon
- 코딩테스트
- 그래프탐색
- dp
- 깊이우선탐색
- 프로그래머스
- Today
- Total
nyunu
[python] 12904, A와 B : 구현, 문자열, 그리디 본문
https://www.acmicpc.net/problem/12904
12904번: A와 B
수빈이는 A와 B로만 이루어진 영어 단어가 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다. 이런 사실에 놀란 수
www.acmicpc.net
[문제]
수빈이는 A와 B로만 이루어진 영어 단어가 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다.
이런 사실에 놀란 수빈이는 간단한 게임을 만들기로 했다. 두 문자열 S와 T가 주어졌을 때, S를 T로 바꾸는 게임이다. 문자열을 바꿀 때는 다음과 같은 두 가지 연산만 가능하다.
- 문자열의 뒤에 A를 추가한다.
- 문자열을 뒤집고 뒤에 B를 추가한다.
주어진 조건을 이용해서 S를 T로 만들 수 있는지 없는지 알아내는 프로그램을 작성하시오.
[입력]
첫째 줄에 S가 둘째 줄에 T가 주어진다. (1 ≤ S의 길이 ≤ 999, 2 ≤ T의 길이 ≤ 1000, S의 길이 < T의 길이)
[출력]
S를 T로 바꿀 수 있으면 1을 없으면 0을 출력한다.
[예제]

[풀이]
💡 문제 요약 : S를 T로 만들 수 있는지 없는지 여부 판단
💡 풀이 포인트
풀이 포인트는 어렵지 않다. T를 뒤부터 연산 적용했을 때 S가 되는지를 확인하면 된다. 마지막 문자부터 반복문을 통해 방문하여 A이면 그대로 삭제해주고, B이면 B는 삭제한 뒤 문자열을 뒤집어 주며 S와 같은 길이에 도달할 때까지 반복문을 실행한다.
예시로 S = B & T = ABBA 일 때,
( 1 ) t[-1] = A이므로, 그대로 삭제 → ABB
( 2 ) t[-1] = B이므로, B는 삭제 & 문자열 뒤집기 → BA
( 3 ) t[-1] = A이므로, 그대로 삭제 → B
( 4 ) len(t) == len(s) 가 성립하므로, 반복문 탈출 & t == s가 성립하므로 1 출력
s = input()
t = input()
while True:
if t[-1] == 'A':
t = t[:-1]
else:
t = t[:-1][::-1]
if len(t) == len(s):
if t == s:
print(1)
else:
print(0)
break
'코딩테스트_python' 카테고리의 다른 글
[python] 11726, 2xn 타일링 : 다이나믹 프로그래밍(DP) (0) | 2024.02.07 |
---|---|
[python] 2138, 전구와 스위치 : 그리디 (0) | 2024.02.07 |
[python] 2212, 센서 : 그리디, 정렬 (1) | 2024.02.06 |
[python] 1141, 접두사 : 그리디, 문자열, 정렬 (0) | 2024.02.02 |
[python] 1105, 팔 : 수학, 그리디 (0) | 2024.02.02 |