For Programmer
백준 2661번 파이썬 문제풀이(좋은수열) 본문
728x90
이 문제 골드 4이지만 파이썬의 슬라이싱 쓰면 인덱스가 범위를 넘어가는 부분을 고려하지 않아도 돼서 아주 쉽게 한줄로 풀 수 있다. 단, 인덱스를 고려하게 된다면 다음 밑의 if문에 인덱스가 넘어가는 부분을 다음과 같이 고려해야 한다.
if len(num) >= 2 * k and j <= len(num) - 2 * k and num[j: j + k] == num[j + k:j + 2 * k]:
하지만 슬라이싱은 인덱스가 넘어가도 인덱스에러가 발생하지 않기 때문에 밑의 조건문 같이 구현해주면 쉽게 문제를 해결할 수 있다.
def dfs(depth, num):
global exit_flag
if exit_flag: # 재귀 전체 종료 변수 체킹
return
if 1 <= depth <= N: # 길이가 1부터 N 까지
for j in range(len(num) - 1): # 마지막 전 변수까지
for k in range(1, len(num) // 2 + 1): # 1개부터~문자열 길이의 절반까지 비교한다.
if num[j: j + k] == num[j + k:j + 2 * k]: # 만약 j 부터 j + k 까지와 j + k 부터 j + 2k 까지의 배열이 동일하다면
return # 나쁜수열 이므로 리턴
if depth == N:
print(num) # 첫 number 찾고
exit_flag = True # 바로탈출 변수 True
return # 재귀 전체 종료
for i in range(1, 3 + 1):
dfs(depth + 1, num + str(i))
N = int(input())
exit_flag = False
dfs(0, '')
728x90
'코팅테스트 > 백준 문제 모음' 카테고리의 다른 글
SWEA1767 프로세서 연결하기 - 파이썬문제풀이 (0) | 2022.03.14 |
---|---|
백준 15683번 파이썬 문제풀이(감시) (0) | 2022.03.06 |
백준 15686번 파이썬 문제풀이(치킨 배달) (0) | 2022.03.02 |
백준 16987번 파이썬 문제풀이(계란으로 계란치기) (0) | 2022.03.02 |
백준 12101번 파이썬 문제풀이(1,2,3 더하기 2) (0) | 2022.02.28 |
Comments