[1940]주몽의 명령

heyryu·2023년 5월 18일
0

문제 접근

  • 시간복잡도: N의 최대 범위가 15,000이므로 O(nlogn)의 시간복잡도인 정렬 알고리즘 사용해도 됨.
  • 입력받은 N개의 재룟값을 정렬 -> 양쪽 끝의 위치를 투 포인터로 지정
# N: 재료의 개수
# M: 갑옷이 되는 번호
# A: 재료 데이터 저장 리스트
N = int(input())
M = int(input())
A = list(map(int, input().split()))

# A 리스트 정렬
A.sort()

# i: 시작 인덱스
# j: 종료 인덱스
# count: 정답 값
i = 0
j = N - 1
count = 0

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)

sort() 함수

  • 기본형: list.sort()
  • 리스트에서만 사용 가능, 기본적으로 오름차순
  • 새로 정렬된 리스트 반환은 sorted함수
  • 리스트 자체를 정렬시키는 것은 sort함수
  • 내림차순일 경우에, list.sort(reverse=True)로 사용
profile
못하면 열심히 하는 게 당연하니까💪 [Frontend/서비스기획]

0개의 댓글