• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

시간초과 관련 질문이요

22.11.08 21:57 작성 조회수 206

0

# 수들의 합
N, M = list(map(int, input().split()))
num = list(map(int, input().split()))

cnt = 0
for i in range(len(num)):
    if num[i] == M:
        cnt += 1
        continue
    tot = num[i]
    for j in range(i+1, len(num)):
        tot += num[j]
        if tot == M:
            cnt += 1
            break

        if tot > M:
            break

print(cnt)

수업 듣기 전 작성한 코드인데요. 이중포문을 사용했습니다. 틀린 풀이인가요? 5번에서 시간초과가 나오던데 이렇게 풀면 안되는 이유가 뭔가요?

 

또 다른 글에 답변 달아주신 것 보니 이 문제는 O(n)의 시간복잡도로 풀어야 한다고 하셨는데요. 문제를 보고 이 문제는 O(~~)의 시간복잡도로 풀어야겠다는 계산은 어떻게 하는건가요? 그냥 풀어보고 시간초과 오류가 나면 O(n)의 풀이로 다시 푸는건가요?

답변 1

답변을 작성해보세요.

0

안녕하세요^^

사실 요즘 코딩테스트를 보면 이런 문제는 정확성도 보지만 효율성도 본다라고 문제에서 미리 이야기해주는 경향이 많습니다. 이런 말이 없을 경우 N제한이 여기는 제가 10,000밖에 안했지만 보통 100,000이상으로 주어지면 효율성도 본다라고 생각하시면 됩니다. 그것도 아니면 채점해보고 판단해야 합니다.