Code/Algorithm

[Python] 백준 1253번 좋다

ki1111m2 2023. 9. 25. 17:21

투 포인터를 활용한 문제

이 문제의 핵심은 본인을 제외했는가 인 것 같다.

 

예를 들어, 0 3 5 8 11이 주어졌을 때 답은 2(8, 11)이다.

그러나 본인을 제외하는 예외처리를 하지 않는다면, 0 + 3 = 3, 0 + 5 = 5 등 0이 카운팅 되어서 답안에 중복이 생긴다.

 

그렇기 때문에 if num[i] + num[j] == num[k] 안에서 if i != k and j != k를 통해 한 번 더 거르는 작업이 필요하다.

# 좋다
# N개의 수 중 어떤 수가 다른 수 두 개의 합으로 나타낼 수 있으면 그 수를 '좋다'고 한다.
# N개의 수 중 몇 개가 좋은 수인지 출력하시오. 수가 같아도 위치가 다르면 다른 수이다.
# 첫째 줄에는 수의 개수 N, 둘째 줄에는 N개의 수가 주어진다.


import sys
input = sys.stdin.readline

n = int(input())
num = list(map(int, input().split()))
num.sort()
cnt = 0

for k in range(n):
    i = 0
    j = n - 1
    while i < j:
        if num[i] + num[j] == num[k]:
            if i != k and j != k:
                cnt += 1
                break
            elif i == k:
                i += 1
            else:
                j -= 1
        elif num[i] + num[j] > num[k]:
            j -= 1
        else:
            i += 1

print(cnt)

 

'Code > Algorithm' 카테고리의 다른 글

[정렬] 버블 정렬  (0) 2023.09.28
[자료구조] 스택과 큐  (0) 2023.09.26
[자료구조] 구간 합  (0) 2023.09.22
[자료구조] 배열과 리스트  (0) 2023.09.21
[알고리즘] 논리 오류 탐색 방법, 디버깅  (0) 2023.09.21