[8/4] 1940 (주몽)

이경준·2021년 8월 4일
0

코테

목록 보기
78/140
post-custom-banner

실버4 문제

내 코드

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

cnt = 0
while (len(arr) >= 2):
    num = m - arr[0]
    if ( num in arr[1:] ):
        cnt += 1
        arr.remove(arr[0])
        arr.remove(num)
    else:
        arr.remove(arr[0])
        
print(cnt)

로직

  1. m에서 리스트에 첫번째 값을 뺀 값이 있으면, 두 값을 제거하고 cnt에 1을 더해준다.
  2. 없으면 첫번째 값만 제거한다
  3. 리스트의 길이가 2 미만이 되면 반복문을 끝낸다.

효율적인 코드

n = int(input())
m = int(input())
arr = list(map(int, input().split()))
arr.sort()
cnt = 0
i, j = 0, n-1

while i < j:
	if arr[i] + arr[j] == m:
    	cnt += 1
        i += 1
        j -= 1
    elif nums[i] + nums[j] < m:
    	i += 1
    else:
    	j -= 1

print(cnt)

피드백

  • 투 포인터를 사용했다.
  • 두 값이 m과 같으면 cnt를 증가시키고, 두 포인터 모두 증가시킨다.
  • 두 값이 m보다 작으면 i값만 증가시킨다.
  • 두 값이 m보다 크면 j값만 감소시킨다.
profile
The Show Must Go On
post-custom-banner

0개의 댓글