문제
https://www.acmicpc.net/problem/3273
3273번: 두 수의 합
n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는
www.acmicpc.net
풀이
문제 푸는 방식은 같지만 다른사람 코드가 더 깔끔하여 가져왔다.
이 문제는 start와 end를 사용하는 투 포인터를 사용해야한다.
오름차순으로 정렬을 해주고 양 끝에서 합을 구해가면서 답을 찾는 방식이다.
start를 첫 인덱스, end를 마지막 인덱스로 지정하기위해 start = 0, end = n-1을 해준다.
start보다 end가 클 때 동안,
1. 만약 arr[start] + arr[end] ==x 면 답을 +1 해주고 start를 1을 더해준다.
2. 만약 arr[start] + arr[end] < x 면 더 큰 수를 더해야하기 때문에 start를 +1을 해준다.
3. 만약 arr[start] + arr[end] > x 면 더 작은 수를 더해야하기 때문에 end -1 을 해준다.
다른사람 코드 - 정돈된 코드
import sys
n = int(input())
numbers = sorted(list(map(int, sys.stdin.readline().split())))
x = int(input())
answer = 0
left, right = 0, n-1 # 왼쪽, 오른쪽
while left < right:
temp = numbers[left] + numbers[right]
if temp == x:
answer += 1
left += 1
elif temp < x:
left += 1
else:
right -= 1
print(answer)
내 코드
n = int(input())
arr = list(map(int,input().split()))
x = int(input())
start,end=0,n-1
cnt=0
arr.sort()
for i in range(n):
while arr[start] + arr[end] < x and start<n-1:
start+=1
while arr[start] + arr[end] > x and end > 1:
end-=1
if start >= end:
break
if arr[start] + arr[end] == x:
cnt+=1
end-=1
start+=1
print(cnt)
start와 end의 비교를 if문으로 넣었기때문에 코드의 길이가 더 길어졌다.
'코딩테스트 > Python' 카테고리의 다른 글
[Python] 백준 #1931 - 회의실 배정 (0) | 2022.01.16 |
---|---|
[Python] 백준 #11725 - 트리의 부모 찾기 (0) | 2022.01.15 |
[Python] 백준 #11399 - ATM (0) | 2022.01.13 |
[Python] 백준 #1012 - 유기농 배추 (0) | 2022.01.13 |
[Python] 백준 #11654 - 아스키 코드 (0) | 2021.12.21 |