on my way

[백준 1253번] 좋다 (Python3, 골드4) 본문

algorithm/Python

[백준 1253번] 좋다 (Python3, 골드4)

wingbeat 2025. 1. 13. 20:41
반응형

 

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 해주어야 한다.

 

메모리는 같으나 리팩토링 후 배열 사용을 안하는 등 시간을 줄임.

반응형