[백준/Python] 1744. 수 묶기

2024. 11. 22. 18:01·CODING_TEST

※ 문제

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

※ 문제 유형

그리디, 정렬, 많은 조건 분기(GOLD_4)

※ 나의 풀이

  • 양수 리스트 [x > 0] (정렬), 0 리스트 [x == 0], 음수 리스트 [x < 0] (절댓값 큰 순서대로 정렬)
  • 양수 리스트 계산
    • 리스트 길이가 홀수 이면, 가장 작은 수를 ans에 더하고,
    • 리스트 길이가 짝수 이면, 
      • i or i +1 의 요소가 1인 경우(1은 곱하는 것보다 더하는게 더 큰 값을 가진다) 모두 ans에 더하기
      • i * i+1의 값을 ans에 더하기
  • 음수 리스트 계산
    • 리스트 길이가 홀수 and 0 리스트가 존재한다면, neg_idx += 1, 그렇지 않다면, 절댓값이 가장 작은 수를 ans에 더하기
    • 리스트 길이가 짝수이면, 
      • i * i+1의 값을 ans에 더하기(음수 * 음수 = 양수)
import sys

N = int(sys.stdin.readline())

pos_arr = [] # 양수 x > 0
zero_arr = [] # 0
neg_arr = [] # 음수 x < 0
for i in range(N):
    x = int(sys.stdin.readline())
    
    if x > 0:
        pos_arr.append(x)
    elif x == 0:   # x = 0
        zero_arr.append(x)
    else:   # x < 0
        neg_arr.append(x)

pos_arr.sort()
neg_arr.sort(reverse=True)

# print(pos_arr)  # [1, 2, 3..]
# print(zero_arr) # [0, 0, 0..]
# print(neg_arr)  # [-1, -2, -3..]

# 양수 리스트 계산 x > 0
ans = 0
pos_idx = 0
if len(pos_arr) % 2 != 0:   # 양수 리스트가 홀수개 이면
    ans += pos_arr[0]
    pos_idx += 1
    # print("pos_arr %2 != 0", ans)
for i in range(pos_idx, len(pos_arr)-1, 2):
    if pos_arr[i] == 1 or pos_arr[i+1] == 1:
        ans += pos_arr[i] + pos_arr[i+1]
        i -= 1
        # print("pos_arr elif", ans)
    else:
        ans += pos_arr[i] * pos_arr[i+1]
        # print("pos_arr else", ans)

# 음수 리스트 계산 x < 0
neg_idx = 0
if len(neg_arr) % 2 != 0:
    if len(zero_arr) > 0:   # 양수 리스트가 홀수개 이면
        # ans += neg_arr[0] * zero_arr[0] # 정렬된 음수 중 가장 큰 수 * 0 = 0
        neg_idx += 1
        # print("neg_arr %2 != 0 ", ans)
    else:
        ans += neg_arr[0]
        neg_idx += 1
for i in range(neg_idx, len(neg_arr)-1, 2):
    ans += neg_arr[i] * neg_arr[i+1]
    # print("neg_arr loop", ans)

print(ans)

 

'CODING_TEST' 카테고리의 다른 글

[프로그래머스/Python] 기사단원의 무기  (0) 2024.12.17
[프로그래머스/Python] 추억 점수  (0) 2024.12.17
[프로그래머스/Python] [1차] 비밀지도  (0) 2024.12.16
[백준/Python] 2606. 바이러스  (0) 2024.11.27
[백준/Python] 2910. 빈도 정렬  (1) 2024.11.26
'CODING_TEST' 카테고리의 다른 글
  • [프로그래머스/Python] 추억 점수
  • [프로그래머스/Python] [1차] 비밀지도
  • [백준/Python] 2606. 바이러스
  • [백준/Python] 2910. 빈도 정렬
YAHO_STUDY
YAHO_STUDY
DATA&AI_study.zip
  • YAHO_STUDY
    YAHO_CODE
    YAHO_STUDY
  • 전체
    오늘
    어제
    • 분류 전체보기 (57)
      • Paper Review (0)
      • SQL (16)
      • CODING_TEST (21)
      • Time Series (0)
      • DL (20)
        • NLP (5)
        • LLM&RAG (15)
        • Recommender System (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    양자화
    DP
    Lora
    MySQL
    boj
    RNN
    한 권으로 끝내는 실전 llm 파인튜닝
    quantization
    pagedattention
    Gemma
    prompt-tuning
    fine-tuning
    runpod
    Programmers
    PEFT
    coding_test
    hash
    SQL
    graph
    qlora
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
YAHO_STUDY
[백준/Python] 1744. 수 묶기
상단으로

티스토리툴바