본문 바로가기

알고리즘/탐색

파이썬 | 백준 | 1639 | 행운의 티켓 | list(map(int, list(sys.stdin.readline().strip())))

https://www.acmicpc.net/problem/1639

 

1639번: 행운의 티켓

첫째 줄에 문자열 S가 주어진다. 문자열 S는 1보다 크거나 같고, 9보다 작거나 같은 수만 입력으로 들어오며, 문자열의 길이는 100보다 작거나 같은 자연수이다.

www.acmicpc.net

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