백준 1253 파이썬, 정렬 후 투 포인터 알고리즘
2024. 2. 7. 17:14ㆍ코딩 도구/백준
반응형
백준 1253 : 좋다
문제
https://www.acmicpc.net/problem/1253
답안 코드 :
import sys
input = sys.stdin.readline
N = int(input())
Result = 0
A = list(map(int, input().split()))
A.sort()
for k in range(N):
find = A[k]
i = int(0)
j = int(N - 1)
while i < j: # 투 포인터 알고리즘
if A[i] + A[j] == find: # find는 서로 다른 두 수의 합 이어야 함을 체크
if i != k and j != k:
Result += 1
break
elif i == k:
i += 1
elif j == k:
j -= 1
elif A[i] + A[j] < find:
i += 1
else:
j -= 1
print(Result)
생각 :
# N(1 ≤ N ≤ 2,000) 라서 좋은 수 하나를 찾는 알고리즘의 시간 복잡도는 N^2보다 작아야함.
# 만약 좋은 수 하나를 찾는데 시간 복잡도가 N^2을 사용해버리면
# 최종 시간 복잡도는 N^3이 되어서 제한시간안에 풀 수가 없다.
# 따라서 nlogn 이 최소겠다.
# 그래서 정렬, 투 포인터 알고리즘을 사용할 것이다.
# 단 , 정렬된 데이터에서 자기 자신을 좋은 수 만들기에 포함하면 안된다.
# 풀이
# 1. 수를 입력받아 리스트에 저장 -> 정렬
# 2. 투포인터 이동
# 투포인터 알고리즘을 계속 반복.
# 도 코드
# for N 만큼 반복 :
# 변수 초기화(찾고자 하는 값 find- A[k], 포인터 i, 포인터 j)
# while i < j:
# if A[i] + Alj] == find:
# 두 포인터 1, j가 k가 아닐 때 좋은 수 개수 1 증가 및 while 문 종료 두 포인터 나 j가 K가 맞을 때 포인터 변경 및 계속 수행
# elif A[i] + A[i] < find: 포인터 오 증가
# else: 포인터 j 감소
반응형
'코딩 도구 > 백준' 카테고리의 다른 글
백준 11003 파이썬, 덱 구현해서 정렬(슬라이딩 윈도우) (42) | 2024.02.09 |
---|---|
백준 12891 파이썬 , 슬라이딩 윈도우 알고리즘 (41) | 2024.02.08 |
백준 1940 파이썬 , 투 포인터 알고리즘 (48) | 2024.02.06 |
백준 2018 파이썬, 투 포인터 (50) | 2024.02.05 |
백준 10986 파이썬 , 구간 합 배열 이용 (48) | 2024.02.03 |