https://www.acmicpc.net/problem/1253
투포인터 문제이다.
배열에 있는 모든 수를 판단해야 하므로, 모든 수를 for문을 돈다.
이후, 두포인터로 시작점과 끝점을 잡는다.
선택된 수의 값을 기준으로 while문을 돌며 투포인터로 해당되는 값을 찾는다
찾는중에 만약 target의 index와 겹치지 않는다면 count 값을 늘려주고,
만약 둘중 하나라도 target의 index와 start, end중 하나가 겹친다면 ( start, end 중 겹친)값을 늘려준다.
import sys
input = sys.stdin.readline
N = int(input())
s = sorted(list(map(int,input().split())))
count = 0
for i in range(N):
start = 0
end = N-1
target = s[i]
while start < end:
if s[start] + s[end] < target:
start += 1
elif s[start] + s[end] > target:
end -= 1
else:
if start != i and end != i: # 서로 다 다른수여야 좋은수
count += 1
break
elif start == i:
start += 1
elif end == i:
end -= 1
print(count)
회고,
서로 다른 수로 target을 만들어야 된다는 점을 인지하지 못하고, 같은 index여도 가능 여부로 두었었다.
조건을 하나도 빠짐없이 잘 정리해서 적용해야겠다.
'PS' 카테고리의 다른 글
[BOJ] Python 백준 특정한 최단 경로(17270) (0) | 2025.01.20 |
---|---|
[BOJ] Python 백준 연예인은 힘들어(17270) (0) | 2025.01.20 |
[BOJ] Python 백준 네트워크 복구(2211) (0) | 2025.01.16 |
[Programmers] Python 프로그래머스 가사 검색(60060) (1) | 2025.01.14 |
[BOJ] Python 백준 타임머신(11657) (0) | 2025.01.13 |
댓글