728x90
반응형
https://www.acmicpc.net/problem/1253
1253번: 좋다
첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수)
www.acmicpc.net
[풀이]
한 수를 다른 두 수의 합으로 나타내야 한다.
0 2가 있을 때 0+2는 2지만 다른 두 수가 아니므로 해당 경우는 카운트 하지 않고,
0 2 2 가 있을 때는 0+2[idx = 1]와 0+2[idx = 2]이므로 2개가 카운트 된다.
[전체 코드]
n = int(input())
numList = list(map(int, input().split()))
numList.sort()
# 중복 수 체크
# 수 개수 -1개
dup = {}
prev = 'a'
cnt = 0
for i in range(n):
now = numList[i]
if prev != now:
dup[prev] = cnt
prev = now
cnt = 0
else:
cnt += 1
dup[prev] = cnt
numSumList = []
for i in range(n-1):
for j in range(i+1, n):
n1 = numList[i]
n2 = numList[j]
# 한 수가 0인 경우 모든 수를 만들 수 있지만
# 다른 수를 만들어야 하므로
if n1 == 0 and n2 == 0:
if dup[0] > 1:
numSumList.append(0)
elif n1 == 0:
if n2 in dup and dup[n2] > 0:
numSumList.append(n2)
elif n2 == 0:
if n1 in dup and dup[n1] > 0:
numSumList.append(n1)
else:
numSumList.append(n1+n2)
ans = set(numList) & set(numSumList)
good = len(ans)
for i in dup:
if i in ans:
good += dup[i]
print(good)
728x90
반응형
'# Coding > # 백준' 카테고리의 다른 글
[백준 / 1022] 소용돌이 예쁘게 출력하기 - Python (0) | 2022.02.09 |
---|---|
[백준 / 1261] 알고스팟 - Python (0) | 2022.02.07 |
[백준 / 1997] 최소 스패닝 트리 - Python (0) | 2022.01.10 |
[백준 / 2206] 벽 부수고 이동하기 - Python (0) | 2021.12.30 |
[백준 / 1987] 알파벳 - Python (0) | 2021.12.29 |