ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 1744. [Python]수 묶기
    Python_알고리즘/Gold IV 2025. 4. 6. 08:54

    1. 문제

     

    https://www.acmicpc.net/problem/1744

     

    2. 접근 방법

     

    • 시간 제한: 2초
    • 메모리 제한: 128MB
    • 정렬

     

    3. 파이썬 코드

     

    import sys
    # 인풋 리스트
    num_list = []
    
    input = sys.stdin.readline
    
    N = int(input())
    
    for _ in range(N):
        num_list.append(int(input()))
    # 리스트 정렬
    num_list.sort()
    # + 부분과 - 부분 구분
    plus_list = []
    minus_list = []
    # 정답 및 len 사용하지 않을 변수 선언
    ans = 0
    plus_length = 0
    minus_length = 0
    # 반복문 돌며 + 리스트와 - 리스트 길이 및 저장
    for i in range(N-1,-1,-1):
        if num_list[i] > 0:
            plus_list.append(num_list[i])
            plus_length += 1
        else:
            minus_list.append(num_list[i])
            minus_length += 1
    # 길이가 있는 경우
    if plus_length > 0:
        # 짝수인 경우와 홀수인 경우 구분
        check = plus_length % 2
        if check == 1:
            # 홀수인 경우 높은값부터 -1번 전까지 곱 or 합 중 높은값 추가
            for j in range(0,plus_length-2,2):
                ans += max(plus_list[j]*plus_list[j+1],plus_list[j]+plus_list[j+1])
            # 이후 맨 마지막 인덱스 더해줌
            ans += plus_list[-1]
        # 짝수인경우 끝까지 합 or 곱 중 높은 값 더함
        else:
            for j in range(0,plus_length-1,2):
                ans += max(plus_list[j]*plus_list[j+1],plus_list[j]+plus_list[j+1])
    # 길이가 있는 경우
    if minus_length > 0:
        # 짝, 홀로 나누어 계산
        check = minus_length % 2
        if check == 1:
            # 위와 마찬가지로 끝값 더해줌
            for j in range(minus_length-1,0,-2):
                ans += (minus_list[j]*minus_list[j-1])
            ans += minus_list[0]
        else:
            for j in range(minus_length-1,-1,-2):
                ans += (minus_list[j]*minus_list[j-1])
    print(ans)

     

    4. 문제를 풀고난 후 생각

     

    • + 리스트와 - 리스트로 나누어서 식의 값들을 계산해주는 방식으로 접근했다.
    • 처음 정렬을 통해서 리스트를 구분한 후 - 리스트의 경우는 - * - = + 이므로 낮은 값들끼리 곱셈을 진행했고 + 리스트는 큰 값의 곱이 덧셈보다 크기 때문에 0번 인덱스부터 진행했다.
    • + 리스트의 경우 1, 1, 1, 1 이런 식으로 나올 수 있기 때문에 덧셈 or 곱셈 중 max 값을 고르는 것으로 예외 처리를 진행해주었다.

     

    5. 문제를 푸는데 도움이 되는 지식

     

    • 정렬

    'Python_알고리즘 > Gold IV' 카테고리의 다른 글

    14502. [Python]연구소  (0) 2024.10.17
    2631. [Python]줄세우기  (0) 2024.10.12
    10159. [Python]저울  (0) 2024.09.19
    17404. [Python]RGB거리 2  (2) 2024.09.02
    1806. [Python]부분합  (0) 2024.08.19

    댓글

Designed by Tistory.