반응형

시간초과

def solution():
    # 첫 번째 장애물은 항상 석순
    # 종유석과 석순이 번갈아가면서 등장 
    # N 만큼 경로 선택 가능

    # 석순의 경우 : (H -1) 만큼 방해
    # 종유석의 경우 : (H-1) 만큼 방해
    # 종유석과 석순이 번갈아 나오는 것을 특징으로 (Graph 그려서 풀기에 많음)


    pass

if __name__ == '__main__':
    N,H = map(int,input().split()) # N은 항상 짝수 (N길이 미터, H 높이 미터)
    
    gate = []
    for _ in range(N):
        gate.append(int(input()))

    # 1구간 : +=1 개수
    # 2구간 : +=1 개수
    # 3구간 : +=1 개수
    # (0,1) (1,H-3) (2,4)
    routes = [0 for _ in range(H)] # 라인 충돌 개수

    for x in range(N):
        석순 = True; 종유석 = False
        if x % 2 == 0:
            석순 = True; 종유석 = False
        if x % 2 == 1:
            석순 = False; 종유석 = True

        if 석순 == True:
            for i in range(gate[x]):
                routes[i] +=1
        if 종유석 == True:
            for i in range(-1,-gate[x]-1,-1):
                routes[i] +=1
    
    count = 0        
    routes.sort() # 정렬
    for route in routes:
        if routes[0] != route:
            break
        count +=1

    print(routes[0],count)

성공코드

# 모범답안
import sys
input = sys.stdin.readline

n, h = map(int, input().split(" "))

# 누적합 이용
lines = [0] * h

for i in range(n):
    high = int(input())
    # 석순
    if i % 2 == 0:
        lines[h - high] += 1
    # 종유석
    else:
        lines[0] += 1
        lines[high] -= 1
        
# 누적합
for i in range(1, h):
    lines[i] += lines[i - 1]
    
# 최소값 체크 및 최소값 갯수 체크
count = 0
low = min(lines)
for i in lines:
    if i == low:
        count += 1
        
print(low, count)
반응형

'IT 인터넷 > 프로그래머스' 카테고리의 다른 글

외판원순회2  (0) 2023.01.15
미친로봇  (0) 2023.01.15
타겟넘버  (0) 2023.01.09
최소직사각형  (0) 2023.01.09
입국심사  (0) 2023.01.09

+ Recent posts