0커플
구름이는 다가오는 크리스마스에 커플이 아닌 지인들을 서로 소개해 주기로 한다. 구름이는 최대한 많은 커플들이 생기기 바라는 마음으로 아래의 기준으로 지인들에게 점수를 부여한다.
• 구름이의 지인의 수는 항상 짝수이다.
• 모든 점수는 0점을 제외한 정수이다.
• 지인들 중 같은 점수를 가지고 있는 경우는 없다.
• 만약에 점을 가진 사람이 있다면 -m점을 가진 사람이 항상 존재한다.
구름이는 지인들 중 점수를 합한 값이 0이 되는 두 명을 짝지어서 소개팅을 진행하기로 한다. 구름이는 위와 같은 규칙으로 지인의 점수를 부여하다가 실수로, 네 번째 규칙을 지 키지 못했다. 그래서 두 사람이 소개팅을 받지 못하게 되었다. 이 때 소개팅을 받지 못한 두 사람의 점수를 합한 값을 출력하시오.
# ex)
>>> 8
>>> 1 2 3 4 -1 -2 -3 -5
-1
>>> 8
>>> -1 1 2 -2 3 -3 4 5
9
? 뭐라는겨
n, -n 의 숫자를 가진 사람은 커플이므로,
우리는 n, -n이 아닌 짝을 찾아 그 숫자를 합산해야 한다
>>> input()
>>> user_input = map(int, input().split())
>>> arr = list(user_input)
# 리스트를 순회하면서 각 요소를 양수로 바꾸기
>>> for i in range(len(arr)):
>>> arr[i] = abs(arr[i])
# 리스트 컴프리헨션을 이용해 간단히
>>> new_arr = [abs(x) for x in arr]
# 중복 숫자 제거 set()사용
>>> unique_arr = list(set(new_arr))
print(sum(unique_arr))
모든 숫자를 양수로 만들고 중복값을 제거하여 남은 숫자들을 합산할려고 했으나
음수가 양수로 바뀌었을 때 합산 값이 잘못 된다는 것을 인식함
흠...
(생각포기)
해설
절댓값 개수 이용
배열에서 절댓값으로 가지는 점수는 항상 2개인 것을 기억!
>>> N = int(input())
>>> S = list(map(int, input().split()))
>>> occur = [0 for _ in range(200001)]
>>> for i in range(N):
# abs 함수는 인자로 들어온 수의 절댓값을 반환하는 함수입니다.
>>> occur[abs(S[i])] += 1
>>> ans = 0
>>> for i in range(1, 200001):
>>> if occur[i] != 1:
>>> continue
>>> for j in range(N):
>>> if abs(S[j]) == i:
>>> ans += S[j]
>>> print(ans)
이지만 이 해설을 보고 눈에 들어오지 않는다
소개팅을 진행한 사람들의 점수 합은 항상 0이 된다
-> 정답은 전체 함수의 합이다
>>> N = int(input())
>>> S = list(map(int, input().split()))
>>> print(sum(S))
'코딩테스트' 카테고리의 다른 글
02 기초 수학과 구현 - 소수 찾기 (0) | 2023.09.09 |
---|---|
02 기초 수학과 구현 - 8진수 계산기 (0) | 2023.09.09 |
02 기초 수학과 구현 - 최장 맨해튼 거리 (0) | 2023.09.09 |
01 기초적인 문자열 구현 - 큰 수식 찾기 (0) | 2023.09.08 |
01 기초적인 문자열 구현 - 단어 필터 (5) | 2023.09.08 |