https://mailprogramming.com/
이 곳에서 1주마다 정기적으로 코딩문제를 받고, 풀어보고 있다.
실리콘밸리에서 소프트웨어 엔지니어로 일하고 있는 팀원들로 구성된 팀이라고 한다.
2. 18/02/19
|
# 정수 배열(int array)가 주어지면 가장 큰 이어지는 원소들의 합을 구하시오.
# 단, 시간복잡도는 O(n).
arr = [-1, 3, -1, 5]
cur_sum = 0
for i in arr:
cur_sum = max(cur_sum+i, i)
print("Output: " + str(cur_sum))
후기
: 마이크로소프트 코딩테스트 문제라고 한다.
화이트보드에 리스트를 그리면서, 처음에는 단순히 Start Point를 찾는 알고리즘을 찾기 위해 각 인덱스를 Start Point로 하게 하여, Sum이 가장 큰 값을 찾아나가면 되겠구나라고 생각했지만, 시간복잡도 O(n)을 초과했다.
CurrentSum이라는 힌트를 보고, cur_sum+i와 이전까지의 합인 cur_sum를 비교해보기도 하고, cur_sum + i > 0라는 조건도 사용해보았지만, 테스트해보니 막상 원하는 결과가 나오지 않았다. 결국 해설을 보고서야 이렇게 될 수 있다는 것을 알았다.
답을 알고나서는 매우 간단한 거였지만, 알기 전까지는 도저히 아이디어가 떠오르지 않았다 ㅠㅠ..
댓글
댓글 쓰기