[백준] 1940번 - 주몽

Cllaude·2023년 6월 22일
1

backjoon

목록 보기
7/65


문제 분석

N의 최대 범위가 15,000이므로 O(nlogn) 시간 복잡도 알고리즘을 사용해도 된다. 일반적으로 정렬 알고리즘의 시간 복잡도는 O(nlogn)이므로, 정렬을 사용해도 된다. 따라서 입력받은 N개의 재룟값을 정렬한 다음 양쪽 끝의 위치를 투 포인터로 지정해 문제에 접근하도록 한다.

투 포인터 이동 원칙
A[i] + A[j] > M : j--
A[i] + A[j] < M : i++
A[i] + A[j] == M: i++ j++ count++


소스 코드

# 주몽의 명령

import sys
input = sys.stdin.readline

N = int(input())
M = int(input())
A = list(map(int, input().split()))
A.sort()
count = 0
i = 0
j = N-1

while i < j:
    if A[i] + A[j] < M:
        i += 1
    elif A[i] + A[j] > M:
        j -= 1
    else:
        count += 1
        i += 1
        j -= 1

print(count)

0개의 댓글