본문 바로가기
CS/Coding Test

[백준] 1253: 좋다 python 구현 / 투 포인터

by hyez 2023. 5. 1.

문제

N개의 수 중에서 어떤 수가 다른 수 두 개의 합으로 나타낼 수 있다면 그 수를 “좋다(GOOD)”고 한다.

N개의 수가 주어지면 그 중에서 좋은 수의 개수는 몇 개인지 출력하라.

수의 위치가 다르면 값이 같아도 다른 수이다.

 

풀이

  1. 리스트를 정렬한다.
  2. 0 ~ N-1까지 반복문을 돌면서 i번째 원소를 선택하고 이를 제외한 리스트(temp)를 생성한다.
  3. 이후 temp에서 두 포인터를 정하여 원소의 합(total)이 i번째 원소에 해당하는지 비교한다.
    1. total < list[i] : start 증가
    2. total > list[i] : end 감소
    3. total == list[i] : answer 증가 후 break
  4. 2, 3 과정을 반복한다

CODE

import sys

n = int(input())
num_list = list(map(int, sys.stdin.readline().split()))
num_list.sort()

answer = 0

for i in range(n):
    temp = num_list[:i] + num_list[i+1:]
    start, end = 0, len(temp)-1

    while start < end :
        total = temp[start] + temp[end]
        if total == num_list[i]:
            answer += 1
            break
        elif total < num_list[i]:
            start += 1
        else:
            end -= 1

print(answer)

댓글