무선 충전
Last updated
Last updated
문제 정리 각 사용자는 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좌표값끼리 연산하면 행은 행대로, 열은 열대로 값을 계산하게 된다.