1. 가장 가까운 값 찾기

import sys
def getNearestInternal(data, m):
'''
m과 가장 가까운 값 후보인 두 값을 리턴하는 함수.
'''
if len(data) == 1:
return (data[0], data[0])
elif len(data) == 2:
return (data[0], data[1])
mid = len(data)//2
if data[mid] <= m:
return getNearestInternal(data[mid:],m)
else:
return getNearestInternal(data[:mid+1],m)
return(0, 0)
def getNearest(data, m) :
'''
n개의 숫자가 list로 주어지고, 숫자 m이 주어질 때, n개의 숫자 중에서 m과 가장 가까운 숫자를 반환하는 함수를 작성하세요.
가장 가까운 값 후보인 두 값을 찾고, 더 가까운 것 반환
'''
value = getNearestInternal(data, m)
'''
value[0] : m 이하이면서 가장 가까운 값
value[1] : m 이상이면서 가장 가까운 값
'''
if m-value[0] <= value[1]-m:
return value[0]
else:
return value[1]
return 0
def main():
'''
이 부분은 수정하지 마세요.
'''
data = [int(x) for x in input().split()]
m = int(input())
print(getNearest(data, m))
if __name__ == "__main__":
main()
2. 거듭제곱 구하기

LIMIT_NUMBER = 1000000007
def getPower(m, n):
'''
m^n 을 LIMIT_NUMBER로 나눈 나머지를 반환하는 함수를 작성하세요.
'''
if n == 0:
return 1
elif n%2 == 0:
temp = getPower(m, n//2)
return (temp*temp) %LIMIT_NUMBER
else:
temp = getPower(m, (n-1)//2)
return (temp*temp*m) % LIMIT_NUMBER
def main():
'''
이 부분은 수정하지 마세요.
'''
myList = [int(v) for v in input().split()]
print(getPower(myList[0], myList[1]))
if __name__ == "__main__":
main()
3. 합병정렬

import sys
import math
def mergeSort(data) :
'''
n개의 숫자를 합병정렬을 이용하여 정렬한 결과를 list로 반환하는 함수를 작성하세요.
'''
if len(data) == 1:
return data
mid = len(data)//2
left = mergeSort(data[:mid])
right = mergeSort(data[mid:])
result = []
leftPtr = 0
rightPtr = 0
while leftPtr < len(left) or rightPtr < len(right):
leftValue = left[leftPtr] if leftPtr < len(left) else math.inf
rightValue = right[rightPtr] if rightPtr < len(right) else math.inf
if leftValue < rightValue:
result.append(leftValue)
leftPtr += 1
else:
result.append(rightValue)
rightPtr += 1
return result
def main():
'''
이 부분은 수정하지 마세요.
'''
data = [int(x) for x in input().split()]
print(*mergeSort(data))
if __name__ == "__main__":
main()
4. 연속부분최대합(어려움)

import sys
def getSubsum(data) :
'''
n개의 숫자가 list로 주어질 때, 그 연속 부분 최대합을 반환하는 함수를 작성하세요.
'''
n = len(data)
if n ==1 :
return data[0]
'''
왼쪽, 오른쪽, 양쪽
'''
mid = n//2
left = getSubsum(data[:mid])
right = getSubsum(data[mid:])
Sum = 0
leftSum = 0
rightSum = 0
for i in range(mid-1, -1, -1):
Sum += data[i]
leftSum = max(Sum, leftSum)
Sum =0
for i in range(mid, n):
Sum += data[i]
rightSum = max(Sum, rightSum)
return max([left, right, leftSum + rightSum])
def main():
'''
이 부분은 수정하지 마세요.
'''
data = [int(x) for x in input().split()]
print(getSubsum(data))
if __name__ == "__main__":
main()