데이터사이언스 기록기📚

[백준/Python] 1744번(그리디, 정렬)_수 묶기 본문

Coding Test/백준(Python)

[백준/Python] 1744번(그리디, 정렬)_수 묶기

syunze 2023. 6. 9. 16:33

📌문제 유형

그리디, 정렬, 많은 조건 분기 (골드4)

 

📌문제

 

1744번: 수 묶기

길이가 N인 수열이 주어졌을 때, 그 수열의 합을 구하려고 한다. 하지만, 그냥 그 수열의 합을 모두 더해서 구하는 것이 아니라, 수열의 두 수를 묶으려고 한다. 어떤 수를 묶으려고 할 때, 위치에

www.acmicpc.net

 

📌나의 문제풀이

- 양수는 nums_pos, 0과 음수는 nums_min에 저장(절댓값 큰 순서대로 정렬)

  • 음수의 경우, -와 -를 곱하면 양수이기 때문에 큰 수를 만들기 위해서는 절댓값이 큰 순서대로 정렬해야 함

- for문에서 2개씩 더한 값과 곱한 값 중에 뭐가 더 큰지 비교 후, 큰 값을 ans에 넣기

- 만약 홀수개라면, 마지막 수는 ans에 그냥 더하기 

n = int(input())
nums_pos = []
nums_min = []

for _ in range(n):
    num = int(input())
    if num > 0:
        nums_pos.append(num)
    else:
        nums_min.append(num)

nums_pos.sort(reverse = True)
nums_min.sort()

ans = 0
for i in range(1,len(nums_pos),2):
    if nums_pos[i-1] + nums_pos[i] < nums_pos[i-1] * nums_pos[i]:
        ans += (nums_pos[i-1] * nums_pos[i])
    else:
        ans += (nums_pos[i-1] + nums_pos[i])

if len(nums_pos) % 2 != 0:
    ans += nums_pos[-1]

for j in range(1,len(nums_min),2):
    if nums_min[j-1] + nums_min[j] < nums_min[j-1] * nums_min[j]:
        ans += (nums_min[j-1] * nums_min[j])
    else:
        ans += (nums_min[j-1] + nums_min[j])

if len(nums_min) % 2 != 0:
    ans += nums_min[-1]

print(ans)

 

📌 다른사람의 문제풀이

- 1은 더해주는 것이 크기 때문에 result에 미리 더하기

 

[백준 1744 : PYTHON] 수 묶기

문제 풀기 : 1744번 1744번: 수 묶기 길이가 N인 수열이 주어졌을 때, 그 수열의 합을 구하려고 한다. 하지만, 그냥 그 수열의 합을 모두 더해서 구하는 것이 아니라, 수열의 두 수를 묶으려고 한다.

cijbest.tistory.com

# n : 데이터의 크기
n = int(input())

# plus : 양수 데이터 리스트, minus : 음수 데이터 리스트
plus = []
minus = []

result = 0
for i in range(n):
    num = int(input())
    if num > 1:
        plus.append(num)
    elif num <= 0:
        minus.append(num)
    else:
        result += num

# 정렬
plus.sort(reverse=True)
minus.sort() # ex) -3 -2 -1 

# 양수 묶기
for i in range(0, len(plus), 2):
    if i+1 >= len(plus):
        result += plus[i]
    else:
        result += (plus[i] * plus[i+1])

# 음수 묶기
for i in range(0, len(minus), 2):
    if i+1 >= len(minus):
        result += minus[i]
    else:
        result += (minus[i] * minus[i+1])

print(result)

 

📌 리뷰 

- 양수, 음수 나누어서 생각해보기

- 규칙 찾기  

728x90
Comments