← 실전 문제

설치 위치 두 곳 고르기

C++완성형

직선 위 후보 위치 중 서로 다른 두 곳에 장치를 설치해요. 장치는 자신과의 거리가 radius 이하인 모든 집에 닿아요. 모든 집이 두 장치 중 하나 이상에 닿는 설치 쌍의 수를 구해요. 같은 두 위치를 반대로 고르는 것은 같은 쌍이에요.

int solution(vector<int> candidates, vector<int> homes, int radius)가 요구한 값을 반환하도록 함수를 작성해 주세요.

매개변수와 반환값

candidates의 길이 N은 010이고 후보 위치는 서로 달라요. homes의 길이 M은 020이며 같은 집 위치가 반복될 수 있어요. 모든 위치와 radius는 030의 정수예요. 거리는 두 위치 차이의 절댓값이에요. 후보가 두 곳 미만이면 0이에요. 집이 없으면 가능한 모든 후보 쌍을 세어요. 반환값은 045예요.

예시

  1. candidates={0, 5, 10}, homes={1, 9}, radius=2이면 1를 반환해요. 양 끝 후보 0과 10을 고른 쌍만 두 집에 모두 닿아요.
  2. 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: 벡터의 크기와 인덱스로 매개변수를 읽어요.

코드 작성과 채점은 로그인 후 이용해요

로그인하고 풀기