https://www.acmicpc.net/problem/1639
solution
입력받은 문자열의 크기에서 2씩 줄이며 조건을 만족하는지 확인
# 1639, 행운의 티켓
import sys
# 왼쪽 N자리 합과 오른쪽 N자리 합이 같은지 확인
def isLucky(x):
mid = len(x) // 2
sum1 = sum2 = 0
for i in range(mid):
sum1 += int(x[i])
sum2 += int(x[len(x)-1-i])
if sum1 == sum2:
return True
else:
return False
s = sys.stdin.readline().strip()
if len(s) % 2 == 0:
chk = len(s)
else:
chk = len(s)-1
while chk > 0:
i = 0
ans = 0
while i+chk <= len(s):
# 행운의 티켓이면 반복문 종료
if isLucky(s[i:i+chk]):
ans = chk
break
i += 1
if ans:
break;
chk -= 2
print(ans)
런타임 에러
2. break를 하지 않고 함수로 만들어 조건을 만족하면 함수를 종료하게 수정, 문자열로 입력받지 않고 리스트로 입력받음
# 1639, 행운의 티켓
import sys
# 왼쪽 N자리 합과 오른쪽 N자리 합이 같은지 확인
def isLucky(x):
mid = len(x) // 2
sum1 = sum(x[:mid])
sum2 = sum(x[mid:])
if sum1 == sum2:
return True
else:
return False
def solution(arr):
if len(arr) % 2 == 0:
chk = len(arr)
else:
chk = len(arr) - 1
while chk > 0:
i = 0
ans = 0
while i + chk <= len(arr):
# 행운의 티켓이면 반복문 종료
if isLucky(arr[i:i + chk]):
ans = chk
return ans
i += 1
chk -= 2
return 0
s = list(map(int, list(sys.stdin.readline().strip())))
print(solution(s))
29380KB
60ms
'알고리즘 > 탐색' 카테고리의 다른 글
파이썬 | 백준 | 1668 | 트로피 진열 (0) | 2020.07.30 |
---|---|
파이썬 | 백준 | 1302 | 베스트셀러 | dictionary sorted (0) | 2020.07.28 |