직선 위 후보 위치 중 서로 다른 두 곳에 장치를 설치해요. 장치는 자신과의 거리가 radius 이하인 모든 집에 닿아요. 모든 집이 두 장치 중 하나 이상에 닿는 설치 쌍의 수를 구해요. 같은 두 위치를 반대로 고르는 것은 같은 쌍이에요.
int solution(vector<int> candidates, vector<int> homes, int radius)가 요구한 값을 반환하도록 함수를 작성해 주세요.
매개변수와 반환값
candidates의 길이 N은 010이고 후보 위치는 서로 달라요. homes의 길이 M은 020이며 같은 집 위치가 반복될 수 있어요. 모든 위치와 radius는 030의 정수예요. 거리는 두 위치 차이의 절댓값이에요. 후보가 두 곳 미만이면 0이에요. 집이 없으면 가능한 모든 후보 쌍을 세어요. 반환값은 045예요.
예시
candidates={0, 5, 10}, homes={1, 9}, radius=2이면1를 반환해요. 양 끝 후보 0과 10을 고른 쌍만 두 집에 모두 닿아요.candidates={0, 4, 8}, homes={4}, radius=4이면3를 반환해요. 세 후보 중 어느 두 곳을 골라도 위치 4인 집에 닿아 세 쌍이에요.
실행용 입출력
첫 줄에 후보 수 n 집 수 m radius, 다음 줄에 후보 위치 n개, 그다음 줄에 집 위치 m개를 입력해요. 빈 목록의 줄은 비워도 돼요. main은 입력을 매개변수로 바꾸고 반환값을 출력하는 채점 하네스예요. 풀이 대상은 solution 함수예요.
예시 입력
3 2 2 0 5 10 1 9
예상 결과
1
예시 입력
3 1 4 0 4 8 4
예상 결과
3
핵심 개념
brute-force: 제한된 후보를 빠짐없이 검사해요.array-1d: 위치별 상태를 따로 유지해요.conditionals: 조건과 정확한 경계를 판별해요.stl-vector: 벡터의 크기와 인덱스로 매개변수를 읽어요.