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 |
Tags
- 동적계획법
- level 3
- dfs
- group by
- javascript
- programmers
- LEVEL 2
- Java
- DP
- softeer
- Lv. 1
- 파이썬
- Lv. 0
- bfs
- Dynamic Programming
- SQL 고득점 KIT
- Lv. 3
- Lv. 2
- 티스토리챌린지
- select
- join
- SQL
- 너비 우선 탐색
- 오블완
- Baekjoon
- 자바스크립트
- Python
- 소프티어
- 프로그래머스
- 깊이 우선 탐색
Archives
- Today
- Total
몸과 마음이 건전한 SW 개발자
백준 GOLD 5 [12919번] A와 B 2 {언어 : Python} [반례 포함] 본문
문제 링크
https://www.acmicpc.net/problem/12919
정답 코드
s = input()
t = input()
lenS = len(s)
lenT = len(t)
answer = 0
def isIncluded(arr):
normarlString = "".join(arr)
reversString = "".join(arr[::-1])
return normarlString in t or reversString in t
def dfs(length, arr):
global answer
if answer:
return
if length == lenT:
string = "".join(arr)
if string == t:
answer = 1
return
if isIncluded(arr+["A"]):
dfs(length+1, arr+["A"])
if isIncluded(["B"] + arr[::-1]):
dfs(length+1, ["B"] + arr[::-1])
dfs(lenS, list(s))
print(answer)
풀이 방법
- 길이가 lenT와 같아지면 종료되는 재귀함수를 만든다.
- 만약 이미 바꿀 수 있음을 확인했다면 종료시킨다.
- 재귀가 최대 2^50 = 1,125,899,906,842,624번 연산이 될 수 있다.
- 따라서 바꾸려고 하는 문자열이 t에 있는지 확인하고 재귀를 돌린다.
- 여기서 문자열을 뒤집어서도 확인 해봐야 한다.
- 그렇지 않으면 다음과 같은 반례가 나온다.
- s = AB
- t = BABB
- 답 = 1
- 오답 = 0
- 따라서 바꾸려고 하는 문자열이 t에 있는지 확인하고 재귀를 돌린다.
- 연산이 끝나면 answer를 출력한다
느낀점
- 항상 반례가 있다는 점을 명심하자.
'알고리즘' 카테고리의 다른 글
코드트리 | HashMap / 자주 등장한 top k 숫자 {언어 : Python} (0) | 2025.01.15 |
---|---|
Softeer [Level 2] 나무 공격 {언어 : JavaScript} (2) | 2024.11.08 |
Softeer [Level 3] [한양대 HCPC 2023] Pipelined {언어 : JavaScript} (1) | 2024.11.01 |
프로그래머스 [Lv. 2] [PCCP 기출문제] 2번 / 퍼즐 게임 챌린지 {언어 : Python} (0) | 2024.09.27 |
프로그래머스 [Lv. 1] [PCCP 기출문제] 1번 / 동영상 재생기 {언어 : JavaScript} (1) | 2024.09.26 |