본문 바로가기
Algorithm

[구현/수학] 백준 28419 더하기 - 파이썬(Python)

by jangThang 2023. 8. 2.
반응형

백준 온라인 저지

 

[ Contents ]

     

     

    1. 문제 (링크 참조)

     

    28419번: 더하기

    정수로 구성된 수열 $A_1, A_2, \cdots, A_N$이 주어진다. 우리는 이 수열에 아래 연산을 원하는 만큼 반복할 수 있다. 인접한 세 값을 1씩 증가시킨다. 이 연산을 최소한으로 사용해 수열의 홀수 번째

    www.acmicpc.net

     

     

    2. 문제 풀이

     주어진 수열의 홀수합과 짝수합을 같게 만드는 문제입니다.

     인접한 3개의 수만 +1씩 올릴 수 있으며, 해당 연산을 최소로 사용해서 같게 만들어야 합니다. 

     

     

     

    3. 코드

    import sys
    input = sys.stdin.readline
    
    #입력
    N = int(input())
    lst = list(map(int, input().split()))
    
    #홀수, 짝수합
    odd_sum = 0
    even_sum = 0
    for i in range(N):
        if i%2 == 0:
            odd_sum += lst[i]
        else:
            even_sum += lst[i]
    
    # N=3이고 홀수합이 더 많다면 불가능
    if N == 3 and odd_sum > even_sum:
        print(-1)
    # 그 외에는 절대값 차이만큼 반복
    else:
        print(abs(odd_sum-even_sum))

     인접한 세 수를 +1씩 하므로, 연산을 1번 할 때마다 짝수합+2 홀수합+1 or 짝수합+1 홀수합+2가 됩니다.

     따라서 짝수합과 홀수합의 차이만큼 연산을 반복해주면 같게 만들 수 있습니다. 하지만 만약 세 개의 수만 주어진다면, 짝수합+1 홀수합+2만 가능합니다.

     그래서 N=3일 때에는 짝수합이 더 많은 경우만 연산 가능하며, 홀수합이 더 크다면 같게 만들 수 없습니다.

     

    star가 되고나서 Tistory

    반응형

    댓글