본문 바로가기
PS

[BOJ] Python 백준 좋다(1253)

by 1223v 2025. 1. 16.

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여도 가능 여부로 두었었다.

조건을 하나도 빠짐없이 잘 정리해서 적용해야겠다.

댓글