메이쁘

(JAVA) 백준 3273번 : 두 수의 합 --- [투포인터] 본문

Algorithm/Baekjoon

(JAVA) 백준 3273번 : 두 수의 합 --- [투포인터]

메이쁘 2020. 9. 19. 12:50

www.acmicpc.net/problem/3273

 

3273번: 두 수의 합

n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는

www.acmicpc.net

 

안녕하세요.

 

기본적인 투 포인터 문제 입니다.

 

 

처음에는 어? 뭐야! 그냥 for문 2개 돌려서 풀면 되겠네! 했다가 시간 초과를 당해서

 

뒤늦게 투포인터를 사용했습니다.

 

 

 

유의사항

 

  -  x의 값은 모든 수를 입력받은 다음 알 수 있습니다. => 모든 수를 별도로 저장해둔 다음, 파악해야 합니다.

 

  -  정확히 두 개의 수를 더해야 합니다. 1개의 수만 가지고 개수를 얻을 수 없습니다. 

 

 

 

매커니즘


풀이 매커니즘은 별 거 없습니다.

 

  1)  입력값 받아 별도 int 배열에 저장하고

 

  2)  해당 배열을 오름차순 정렬한 후 (오름차순 정렬하지 않아도 될 것 같습니다..)

 

  3)  시작점 = 0, 끝점 = n - 1 에서 각각 시작해서 교차하기 전까지(같아도 종료. 이유는 1개의 수 가지고 판단할 수 없기 때문에) 시작점과 끝점의 원소를 더합니다.

 

  4)  같다 -> 카운트 ++

 

  5) 

  -  4) 를 거치고 난 이후, 두 원소의 합이 x와 같거나 x보다 더 크다 -> 시작점 한 칸 오른쪽으로 이동(시작점++)

  -  두 원소의 합이 x보다 작다 -> 끝 점 한 칸 왼쪽으로 이동(끝점--)

 

  6)  개수 출력!

 

 

 

이상입니다.

 

감사합니다.

 

 

 

소스코드


Comments