[BOJ 1940] 주몽

문지영·2023년 3월 9일
0

CODINGTEST

목록 보기
11/21

문제 1940

정답

N, M = int(input()), int(input())
arr = list(map(int, input().split()))
arr.sort()

i, j = 0, N-1 
count = 0 
while i < j:
    if arr[i]+arr[j] < M: i+=1
    elif arr[i]+arr[j] > M: j-=1
    else: # 두 수의 합이 M이면
        count+=1
        i+=1
        j-=1

print(count)

풀이

투 포인터 i와 j, i<j 동안 반복
i: 앞부터, j: 뒤부터 검사
두 수의 합이 M이면 count++
M보다 작으면 i++
M보다 크면 j--

정답2

N, M = int(input()), int(input())
arr = list(map(int, input().split()))
occur = [0]*M
count = 0

for n in arr:
    if M-n>0 and occur[M-n]: count+=1
    if n<M: occur[n]=1

print(count)

풀이2

N은 자연수이며 서로 다른 수
nums: 0~M 인덱스를 가진 리스트로 arr에 존재하는 숫자를 표시, 즉, 1~M까지 숫자만 저장
Indexerror 방지를 위해 인덱스가 범위 안에 있는 확인 필요

제출


아래: 정답
위: 정답2

비슷한 유형

profile
BeHappy

0개의 댓글