Skip to content

Latest commit

 

History

History
106 lines (89 loc) · 3.09 KB

File metadata and controls

106 lines (89 loc) · 3.09 KB

백준 2036번 수열의 점수

2036


코드 설명

  • 양수와 음수로 나누어 각 리스트에 담아 계산을 해주었다.
    -> (중요!) 이때 양수 리스트에서는 1을, 음수 리스트에서는 0을 주의해야 한다!(0을 음수 리스트에 넣어줌)
  • 반복문 범위를 주의해야 한다. (2개씩 곱해서 더해줄 경우 인덱스 주의)

소스코드

  • 메모리 : 34800 KB
  • 시간 : 156 ms
import sys

n = int(input())
plus = []
minus = []
answer = 0
zero = 0

for i in range(n):
	num = int(sys.stdin.readline())
	if num > 0:
		if num == 1:
			answer += 1
		else:
			plus.append(num)
	else:
		if num == 0:
			zero = 1
		else:
			minus.append(num)

plus.sort(reverse=True)
minus.sort()

if len(plus)%2 == 0:
	for p in range(0,len(plus)-1,2):
		answer += plus[p]*plus[p+1]
else:
	for p in range(0,len(plus)-2,2):
		answer += plus[p]*plus[p+1]
	answer += plus[-1]

if len(minus)%2 == 0:
	for m in range(0,len(minus)-1,2):
		answer += minus[m]*minus[m+1]
else:
	for m in range(0,len(minus)-2,2):
		answer += minus[m]*minus[m+1]
	if zero == 0:
		answer += minus[-1]
	
print(answer)

오답 노트

  • 총 3가지 이유로 여러번 틀렸는데 차례로 다음과 같다.
  1. 음수 리스트에 0을 넣었을 때 0을 주의하지 않았다. -> 음수는 2개를 곱하면 양수가 되지만 1개만 더해질 경우 마이너스가 된다.
    그렇지만 음수와 0을 곱할 경우 그 수는 0이 되기 때문에 음수 리스트 크기가 홀수라면,
    0을 곱해줌으로써 점수가 작아지지 않도록 해준다.
  2. 양수 리스트에서 1을 고려해주지 않았다.
    -> 양수 리스트는 무조건 두 수를 곱했을 때 더 커진다고 생각했지만 1은 오히려 곱하는 것보다 더하는 편이 더 커지는데 일조한다.
    예시로 3 과 1 이 있다면 두 개를 곱하면 3 이지만 더하면 4가 되기 때문에 더하는 편이 더 크다.
  3. 마지막으로 for문 범위 설정에서 실수했다. -> 2개의 수를 곱해주기 때문에 인덱스는 1씩 증가하는 것이 아니라 2씩 증가해야 한다.
    그렇지 않으면 중복된 수를 더하거나 곱해주기 때문에 꼭 겹치지 않도록 주의해야 한다.

오답 코드(위의 3가지를 모두 고려하지 못했던 가장 처음 코드)

import sys

n = int(input())
plus = []
minus = []
answer = 0
for i in range(n):
	num = int(sys.stdin.readline())
	if num > 0:
		plus.append(num)
	else:
		minus.append(num)

plus.sort(reverse=True)
minus.sort()

if len(plus)%2 == 0:
	for p in range(len(plus)-1):
		answer += plus[p]*plus[p+1]
else:
	for p in range(len(plus)-2):
		answer += plus[p]*plus[p+1]
	answer += plus[-1]
	
if len(minus)%2 == 0:
	for m in range(len(minus)-1):
		answer += minus[m]*minus[m+1]
else:
	for m in range(len(minus)-2):
		answer += minus[m]*minus[m+1]
	answer += minus[-1]
	
print(answer)