[파이썬/python] 백준 - 1253 좋다

2025. 8. 5. 14:30·알고리즘
반응형

문제

https://www.acmicpc.net/problem/1253


문제 설명

  1. N개의 수 중에서 어떤 수가 다른 수 두 개의 합으로 나타낼 수 있다면 그 수를 좋다(GOOD)고 한다.
  2. N개의 수 중에서 좋은 수의 개수를 출력하라.
    1. 수의 위치가 다르면 값이 같아도 다른 수이다.

 


풀이

문제는 단순했다. N개의 숫자중 2개의 숫자를 합했을 때 N개의 숫자에 포함되는 수를 구하면 된다.

문제는 N의 크기다. N은 최대 2000개가 입력된다.

따라서 완전탐색을 통한다면, $N^3 = 10^9$ 정도의 시간이 걸리기 때문에 시간초과가 발생한다.

즉 이를 줄일 수 있는 방법을 고안해야 한다.

 

나는 결과(두 숫자의 합)와 첫 번째 숫자를 택하고 이분탐색을 통해 두 번째 숫자를 탐색했다.

이러한 방식이라면 시간복잡도는 $N^2*logN = 10^7$ 정도의 시간을 가지기 때문에 충분히 문제를 해결할 수 있다.

 

  1. N개의 수 중 1개 i를 택한다.
  2. 탐색에 사용할 첫 번째 숫자 j를 선택한다.
  3. 이분탐색을 통해 두 번째 숫자를 탐색한다.
  4. 현재 숫자가 좋다(GOOD)면, 결과를 증가시킨다.

코드

import sys
input = sys.stdin.readline

def binary_search(target, arr, skip1, skip2):
    s, e = 0, len(arr) - 1
    while s <= e:
        mid = (s + e) // 2
        if mid == skip1 or mid == skip2:
            if mid < skip1:
                s = mid + 1
            else:
                e = mid - 1
            continue

        if arr[mid] < target:
            s = mid + 1
        elif arr[mid] > target:
            e = mid - 1
        else:
            return True
    return False

N = int(input())
arr = sorted(list(map(int, input().split())))
res = 0

for i in range(N):
    for j in range(N):
        if i == j:
            continue
        target = arr[i] - arr[j]
        if binary_search(target, arr, i, j):
            res += 1
            break
print(res)

시간복잡도

  • 시간복잡도는 $O(N^2*logN) = O(10^7)$ 이다.
반응형

'알고리즘' 카테고리의 다른 글

[파이썬/python] 백준 - 18234 당근 훔쳐 먹기  (3) 2025.08.07
[파이썬/python] 백준 - 2597 줄자접기  (0) 2025.08.06
[파이썬/python] 백준 - 1235 학생 번호  (1) 2025.08.04
[파이썬/python] 백준 - 17141 연구소 2  (3) 2025.08.03
[파이썬/python] 백준 - 28069 김밥천국의 계단  (2) 2025.08.02
'알고리즘' 카테고리의 다른 글
  • [파이썬/python] 백준 - 18234 당근 훔쳐 먹기
  • [파이썬/python] 백준 - 2597 줄자접기
  • [파이썬/python] 백준 - 1235 학생 번호
  • [파이썬/python] 백준 - 17141 연구소 2
개골개굴
개골개굴
굶고 코딩하기
  • 개골개굴
    밥스토리
    개골개굴
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (162) N
      • SW 마에스트로 (0)
      • 알고리즘 (125) N
      • CS (13)
      • Java (6) N
      • 자기개발 (18)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    OS
    알고리즘
    python
    SMTP
    컴퓨터구조
    Redis
    작심삼일 챌린지
    컴퓨터 구조
    async
    JPA
    completablefuture
    파이썬
    java
    인프런
    springboot
    백준
  • 최근 댓글

  • 반응형
  • hELLO· Designed By정상우.v4.10.0
개골개굴
[파이썬/python] 백준 - 1253 좋다
상단으로

티스토리툴바