무선 충전
문제 정리 각 사용자는 A개의 BC에 대해 현재 user가 어떤 BC를 선택했을 때 최대 충전양을 갖는지 모든 경우의 충전합을 다 구하고, 최댓값으로 갱신하면 된다!
이동 방향 정보 : 0일 때는 움직이지 않으므로 방향 이동값을 0으로 해준다. 크기가 5인 방향 델타 어레이. dx = {0,-1,0,1,-1}; dy = {0,0,1,0,0};
이 문제의 경우, 시작점과 그리드의 크기, 이동 방향 정보 모두가 다 정해져있다. 시작점과 이동 방향 정보가 다 정해져있기 때문에, 생각해야되는 것은 두 사용자가 동시에 동일한 BC에 접속했을 때 처리만 해주면 되는 것이다!
문제에서 요구하는 답은 사용자의 충전합이기 때문에, 동시에 BC에 접속했을 때, 충전양이 균등하게 분배된다는 것은 훼이크다! 어차피 합산하는 것이기 때문이다!!⭐️⭐️⭐️⭐️⭐️
두 사용자가 동시에 동일한 BC에 접속했을 때 경우의 수 생각⭐️⭐️⭐️⭐️⭐️ 1. 한 사용자가 다른 BC에도 속하는 경우 : 사용자 A, B는 서로 다른 BC를 선택했을 때 최대 충전합을 가질 수 있다. 충전합산 양은 사용자A, B가 각각 선택한 BC의 power를 더하면 됨. 2. 두 사용자 모두 하나의 BC에만 속하는 경우 : 결국 구하고자 하는 것은 두 사용자의 충전양 합이기 때문에, 합 sum에 BC의 power를 한번만 더해주면 된다. 즉, 사용자 A가 속하는 BC의 power를 한번 더했으면, 사용자 B는 충전양을 더하지 않는 것이다.
재귀함수 구현 : 2명의 user가 BC를 선택한다.(2명의 사용자에 대해 재귀함수 실행) 각 사용자가 A개의 BC중 하나를 선택하는 것이지만, 정작 재귀함수 내부에서는 A개의 BC에 대해 a번 BC를 선택O, 선택X 관점으로 구현되는 것 같다. a번 BC가 한번 선택되어 충전합에 합산되면, BC[a].used를 1로 마킹하여 다음 유저가 선택하지 못하도록한다. 이렇게 하면 2번의 경우에도 나머지 사용자는 충전양을 더하지 않게 되고, 1번의 경우에도 나머지 사용자는 충전양을 더하거나 더하지 않거나 할 수 있다.

a = 0) ① 사용자A,사용자B 동시에 a=0번 BC에 넣을 때 최댓값 사용자A가 0을 이미 선택해서 사용자B는 다른 속한 BC가 없으면 ①이 최댓값이 된다. a = 1)사용자A가 1번째 BC 선택하면 다음 재귀호출을 통해 사용자B는 0번째 BC를 선택할 수 있다! a=0일 때 충전합 과 a=1일 때 충전합 중 최댓값으로 갱신하여 리턴한다!
틀린 이유
문제에서 (x행,y열 ) 형태가 아니라 (열y,x행)형태로 좌표를 선정한 경우 : x와 y의 순서 바꿔서 저장한다고 생각하면 된다. 즉, y를 먼저 입력받고, x를 후에 입력받는 것이다. 따라서 문제에서 주어진 거리를 구할 때에도, x좌표값끼리, y좌표값끼리 연산하면 행은 행대로, 열은 열대로 값을 계산하게 된다.
Last updated
Was this helpful?