안녕하세요, 제가 처음에는 파이썬으로 코드를 짜고 계속해서 시간초과가 나와서 같은 논리로 C++로 작성하여서 통과하였습니다.
파이썬이 C++보다 느린 것은 알고 있었지만, 같은 논리인데도 통과 못 할 정도로 차이가 나는가 싶어서 질문드리게 되었습니다.
그렇다면 알고리즘을 풀 때 파이썬보다는 C++로 짜야 할까요..
아니면 제가 틀린 부분이나 비효율적인 부분 알려주시면 감사하겠습니다.
파이썬 코드를 위에 올렸는데, </i>등이 붙어서 나오네요.. 제가 일단 수정했는데 인덴트가 약간씩 안 맞을 수 있을 것 같습니다.
import collections
import sys
N, M, B = map(int, input().split())
grounds = [] # 땅의 높이를 기록
maxh = 0 # 처음 땅의 최대 높이
minh = 0# 처음 땅이 최소 높이
ans_time = [] # 걸리는 시간을 기록
ans_height = []# 작업 후 땅의 높이를 기록
# 조건 입력 및 최대/최소 높이 구하기
</i>for i in range(N):
line = list(map(int, sys.stdin.readline().rstrip().split()))
temp_maxh = max(line)
temp_minh = min(line)
if maxh<temp_maxh: maxh = temp_maxh
if minh>temp_minh: minh = temp_minh
grounds.append(line)
for h in range(minh, maxh+1):
need_block = 0
need_time = 0
for i in range(N):
d = collections.Counter(grounds[i]) # 각 줄마다 높이들의 개수 계산
c = d.most_common()
for j in range(len(c)):
high, num = c[j]
#각 줄마다 필요한 시간 및 블록 개수 구함
if h<high:
need_block = need_block - (high-h)*num
need_time = need_time + 2*num*(high-h)
elif h>high:
need_block = need_block + (h-high)*num
need_time = need_time + num*(h-high)
# 필요한 블록이 가지고 있는 것보다 적거나,걸리는 시간이 기존 것보다 더 걸리면 continue
if need_block>B or (len(ans_time)!=0 and min(ans_time)<need_time): continue
else:
ans_height.append(h)
ans_time.append(need_time)
min_time = min(ans_time)
ans_arr = []
for i in range(len(ans_time)):
if ans_time[i]==min_time:
ans_arr.append(ans_height[i])
print(f"{min_time} {max(ans_arr)}")
thyung 3년 전
안녕하세요, 제가 처음에는 파이썬으로 코드를 짜고 계속해서 시간초과가 나와서 같은 논리로 C++로 작성하여서 통과하였습니다.
파이썬이 C++보다 느린 것은 알고 있었지만, 같은 논리인데도 통과 못 할 정도로 차이가 나는가 싶어서 질문드리게 되었습니다.
그렇다면 알고리즘을 풀 때 파이썬보다는 C++로 짜야 할까요..
아니면 제가 틀린 부분이나 비효율적인 부분 알려주시면 감사하겠습니다.
파이썬 코드를 위에 올렸는데, </i>등이 붙어서 나오네요.. 제가 일단 수정했는데 인덴트가 약간씩 안 맞을 수 있을 것 같습니다.