on my way
[백준 1253번] 좋다 (Python3, 골드4) 본문
반응형
https://www.acmicpc.net/problem/1253
# 정답이긴 하나 리팩토링 전 코드
import sys
N = int(sys.stdin.readline())
arr = sorted(map(int, sys.stdin.readline().split()))
good = [False] * N
for idx, a in enumerate(arr):
start, end = 1 if idx == 0 else 0, N-2 if idx == N-1 else N-1
while start < end:
if a == arr[start] + arr[end]:
good[idx] = True
break
elif arr[start] + arr[end] < a:
start += 1
if start == idx: start += 1
else:
end -= 1
if end == idx: end -= 1
print(len([1 for g in good if g]))
# 리팩토링
import sys
N = int(sys.stdin.readline())
arr = sorted(map(int, sys.stdin.readline().split()))
count = 0
for idx, target in enumerate(arr):
start, end = 0, N-1
while start < end:
if start == idx:
start += 1
continue
if end == idx:
end -= 1
continue
cur = arr[start] + arr[end]
if target == cur:
count += 1
break
elif target > cur :
start += 1
else:
end -= 1
print(count)
각각 기준 수를 기준으로 투포인터로 반복한다.
단, 다른 수를 합하는 것이 기준이기에 start, end가 기준 수와 겹치지 않도록 start와 end가 시작점과 끝이면 +1, -1 해주어야 한다.
메모리는 같으나 리팩토링 후 배열 사용을 안하는 등 시간을 줄임.
반응형
'algorithm > Python' 카테고리의 다른 글
[백준 5622번] 다이얼 (Python3, 브론즈2) (0) | 2025.01.13 |
---|---|
[프로그래머스 코딩테스트 연습] 자연수 뒤집어 배열로 만들기 (Python3) (0) | 2025.01.13 |
[백준 1940번] 주몽 (Python3, 실버4) (0) | 2025.01.13 |
[백준 2018번] 수들의 합 5 (Python3, 실버5) (0) | 2025.01.13 |
[프로그래머스 코딩테스트 연습] 연속 펄스 부분 수열의 합 (Python3) Lv3 (1) | 2024.09.13 |