백준 1940[주몽]

Ju_Nik_e·2023년 5월 1일
1

baekjoon

목록 보기
8/16

1. 문제분석 및 접근법

  • n의 범위가 10^4이므로, O(n^2)은 불가능, O(nlogn)은 가능
    ->정렬 알고리즘 사용가능
  • 1개의 갑옷은 2개의 재료만을 이용해 제작 가능
  • 투포인터 를 이용하되, start와 end를 같이 증가시키는 방식으로 접근
  1. 입력받은 리스트 정렬
  2. start,end 번호를 0과 n으로 설정
  3. m보다 작으면 start를 이동, 크면 end를 이동
  4. start+ end가 m과 같으면 둘다 이동, 카운트 증가

2. 슈도코드

n입력받기
m입력받기
nums 리스트로 입력받기
nums 정렬
start = 0
end = n-1(인덱스 번호로 해야되니까)
cnt 변수 생성

while start가 end보다 작으면:
	if 2개 합 > m:
    	end -= 1
    elif 2개 합 < m:
    	start += 1
    else
		cnt += 1
        start += 1
        end -= 1

cnt 출력

3. 코드 구현

import sys
input = sys.stdin.readline

n = int(input())
m = int(input())
nums = list(map(int, input().split()))
nums.sort()

start = 0
end = n-1
cnt = 0

while start < end:
    if nums[start] + nums[end] > m:
        end -= 1
    elif nums[start] + nums[end] < m:
        start += 1
    else:
        cnt += 1
        start += 1
        end -= 1

print(cnt)

0개의 댓글