*문제 출처는 백준에 있습니다.
문제 제목: 수 묶기 / 1744번 (골드 4단계)
문제 사이트: https://www.acmicpc.net/problem/1744
문제 설명

나의 풀이
def main():
answer = 0
n = int(input())
sequence = []
# 입력 수열 생성
for _ in range(n):
num = int(input())
sequence.append(num)
# 1은 따로 세기 (곱하는 것보다 더하는 게 이득)
ones = sequence.count(1)
sequence = [x for x in sequence if x != 1]
# 0 존재 여부 확인 (음수 단독 제거 용도)
zero_count = sequence.count(0)
sequence = [x for x in sequence if x != 0]
# 양수, 음수 나누기
positives = [x for x in sequence if x > 1]
negatives = [x for x in sequence if x < 0]
positives.sort(reverse=True)
negatives.sort()
# 양수: 큰 수부터 곱
for i in range(0, len(positives), 2):
if i + 1 < len(positives):
answer += positives[i] * positives[i + 1]
else:
answer += positives[i]
# 음수: 작은 수부터 곱
for i in range(0, len(negatives), 2):
if i + 1 < len(negatives):
answer += negatives[i] * negatives[i + 1]
else:
if zero_count == 0:
answer += negatives[i]
# else: 0과 곱해서 무시됨
# 1은 무조건 더함
answer += ones
print(answer)
if __name__ == "__main__":
main()

※ 알아야 할 것
1. 1은 곱하지 말고 더해야 합니다! (1 * x < 1 + x)
2. 음수는 가능한 한 작은 수끼리 곱해서 양수로 만들어야 합니다
3. 0은 음수와 짝지으면 좋고, 혼자 남은 음수를 없앨 수 있습니다.
4. 남은 숫자 홀수일 경우도 정확히 처리합니다!
'Coding Test > 백준-Python' 카테고리의 다른 글
| 백준 / 상자넣기 / 1965번 / Python (0) | 2025.04.30 |
|---|---|
| 백준 / 최소비용 구하기 2 / 11779번 / Python (0) | 2025.04.28 |
| 백준 / 영역 구하기 / 2583번 / Python (0) | 2025.04.23 |
| 백준 / 제곱수 찾기 / 1025번 / Python (0) | 2025.04.21 |
| 백준 / N과 M (10) / 15664번 / Python (0) | 2025.04.17 |