IT recording...
[BOJ] 7453 합이 0인 정수 - python 본문
https://www.acmicpc.net/problem/7453
풀이
|
최종 코드
import sys
def input():
return sys.stdin.readline().rstrip()
N = int(input())
A,B,C,D = [],[],[],[]
for n in range(N):
a,b,c,d = map(int,input().split(" "))
A.append(a)
B.append(b)
C.append(c)
D.append(d)
AB = {}
for a in A:
for b in B:
#dictionary에 이미 존재하면 그 값을, 존재하지 않으면 default값으로 0을
AB[a+b] = AB.get(a+b,0) + 1
answer = 0
for c in C:
for d in D:
answer += AB.get(-(c+d),0)
print(answer)
얻어가는 것
- dict의 default값
AB = {} #AB[ab]값이 존재하면 그 값을, 존재하지 않으면 디폴트값을 return한다. AB.get(ab,디폴트값) #ex) 검사 후 저장하기 AB[a+b] = AB.get(a+b,0) + 1 #ex) 있으면 가져오고 아니면 0 가져오기 answer += AB.get(-(c+d),0)
느낀점
"211202"
소요 시간 : 1h
- 시간이 12초이길래 빡센 문제일거라고는 생각했는데 왜 똑같은 방법인데 시간초과 내는건데,,
- 그래도 쪼개서 하고, -절댓값으로 하는 아이디어는 잘 냈다.
- for문을 다 수행하고 나서 또 수행하는 경우에는 한 번 수행하고 거기서 조건 검사를 끝낼 수 있는지 확인하자
- 몇 번째 애를 사용했는지는 중요하지 않고, 그냥 걔를 몇 번 사용했는지만 중요한 애라면 dict를 통해서 빈도를 저장해놓아서 사용하는 방법을 생각해보자(dict.get애용하기! → defaultdict도 좋은데 느리다고 함)
'Algorithm' 카테고리의 다른 글
[BOJ] 1991 트리 순회 - python (0) | 2021.12.07 |
---|---|
[BOJ] 10828 스택 - python (0) | 2021.12.06 |
[BOJ] 1072 두 배열의 합 - python (0) | 2021.12.02 |
[BOJ] 2143 두 배열의 합 - python (0) | 2021.12.02 |
[BOJ] 2096 내려가기 - python (0) | 2021.12.02 |
Comments