ALGORITHM/BOJ

[BOJ] 1253번 좋다 (C++)

yegyeom 2022. 1. 19. 16:21

문제 (https://www.acmicpc.net/problem/1253)

 

1253번: 좋다

첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수)

www.acmicpc.net

처음엔 검사하는 숫자보다 작은 수들로만 검사하는 숫자가 만들어진다고 생각했다. 하지만 음수도 가능하기 때문에 -4 -2 -2 같은 케이스가 존재한다. (-4가 좋은 수) 

또한 자기 자신은 서로 다른 두 수에 해당하면 안 되므로 예외 처리를 해주어야 한다. 나는 그냥 for문을 돌 때마다 원본 벡터를 복사한 벡터에 해당 숫자를 erase로 제거하여 사용했다.

 

- n이 2보다 작거나 같으면 다른 수 두 개의 합으로 나타낼 수 없으므로 0을 출력하고 종료한다.

- 입력받은 수들을 오름차순 정렬한다.

- 복사본 벡터에서 i번째 숫자를 제거한다. (erease 함수)

- 투 포인터로 i번째 숫자가 좋은 수가 될 수 있는지 확인한다.


[소스코드]