반응형
Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 백준
- spring-boot3
- express
- neo4j 제약조건
- PREFECT
- gensim
- 백준 2470
- cs50
- 플로이드워셜
- pandas-profiling
- 첫서버
- 투포인터
- nodemon babel
- GET REQUESTS
- 백준 7795
- gensim size
- 그랜빌의 법칙
- neo4j 인덱스 사용
- UnsatisfiedDependencyException
- 워드 임베딩
- neo4j
- Sequenial
- 백준 회전초밥
- gensim_models
- 알고리즘
- 텍스트전처리
- 파이썬
- spring-boot2
- BFS
- neo4j 스키마 정의
Archives
- Today
- Total
정리정돈
[백준 7456] 합이 0인 네 정수 (Python) 본문
728x90
반응형
https://www.acmicpc.net/problem/7453
7453번: 합이 0인 네 정수
첫째 줄에 배열의 크기 n (1 ≤ n ≤ 4000)이 주어진다. 다음 n개 줄에는 A, B, C, D에 포함되는 정수가 공백으로 구분되어져서 주어진다. 배열에 들어있는 정수의 절댓값은 최대 228이다.
www.acmicpc.net
나의 풀이(시간 초과)
import sys
input = sys.stdin.readline
n = int(input())
A, B, C, D = [],[],[],[]
for _ in range(n):
q,w,e,r = map(int,input().split())
A.append(q)
B.append(w)
C.append(e)
D.append(r)
A = sorted(A)
B = sorted(B)
C = sorted(C)
D = sorted(D)
cnt = 0
for i in range(n):
a = A[i]
for j in range(n):
b = B[j]
for k in range(n):
c = C[k]
for l in range(n):
d = D[l]
if sum([a,b,c,d]) == 0:
temp.append([a, b, c, d])
cnt += 1
print(cnt)
당연히 시간초과가 날것이라고 생각했고 도저히 아이디어가 떠오르지 않아 풀이를 찾게 되었다.
재도전(실패)
import sys
input = sys.stdin.readline
n = int(input())
A, B, C, D = [],[],[],[]
arr = [list(map(int,input().split())) for _ in range(n)]
ab = []
cd = []
for i in range(n):
for j in range(n):
ab.append(arr[i][0] + arr[j][1])
cd.append(arr[i][2] + arr[j][3])
ab = list(set(ab))
cd = list(set(cd))
ab.sort()
cd.sort(reverse = True)
ab_start, cd_start = 0, 0
cnt = 0
while ab_start < len(ab) and cd_start < len(cd):
if ab_start >= len(ab) or (cd_start < len(cd) and ab[ab_start] + cd[cd_start] < 0):
ab_start += 1
else:
if ab[ab_start] + cd[cd_start] == 0:
cnt += 1
cd_start += 1
print(cnt)
시간초과가 나버렸다
찾아본 정답 코드
import sys
input = sys.stdin.readline
if __name__ == "__main__":
n = int(input())
arr = [list(map(int, input().split())) for _ in range(n)]
ab, cd = [], []
for i in range(n):
for j in range(n):
ab.append(arr[i][0] + arr[j][1])
cd.append(arr[i][2] + arr[j][3])
ab.sort()
cd.sort()
# print(ab, cd)
i, j = 0, len(cd) - 1
result = 0
while i < len(ab) and j >= 0:
if ab[i] + cd[j] == 0:
nexti, nextj = i + 1, j - 1
while nexti < len(ab) and ab[i] == ab[nexti]:
nexti += 1
while nextj >= 0 and cd[j] == cd[nextj]:
nextj -= 1
result += (nexti - i) * (j - nextj)
i, j = nexti, nextj
elif ab[i] + cd[j] > 0:
j -= 1
else:
i += 1
print(result)
백준 7453번 - 합이 0인 네 정수(★★★ / X▲ / 2) : Python
풀이 시간 : 30분시간 제한 : 12초메모리 제한 : 1024MB기출 : 백준 7453번 문제링크 : https://www.acmicpc.net/problem/7453정수로 이루어진 크기가 같은 배열 A, B, C, D가 있다.Aa, Bb, Cc, Dd의 합
velog.io
728x90
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준 7795] 먹을 것인가 먹힐 것인가 (Python) (0) | 2022.03.25 |
---|---|
[백준 2531] 회전 초밥 (Python) (0) | 2022.03.25 |
[백준 2470] 두 용액 (Python) (0) | 2022.03.24 |
[백준 11728] 배열 합치기(Python) (0) | 2022.03.24 |
[백준 1644] 소수의 연속합(Python) (0) | 2022.03.24 |