Algorithm/Programmers
[Lv.2] 당구 연습
시롱시롱
2023. 4. 9. 21:32
import java.util.ArrayList;
import java.util.List;
class Solution {
public int[] solution(int m, int n, int startX, int startY, int[][] balls) {
List<Integer> ansList=new ArrayList<>();
for (int[] ball : balls) {
int targetX=ball[0];
int targetY=ball[1];
if(targetX==startX){
int widthPow=(targetY-startY)*(targetY-startY);
int heightPow1,heightPow2;
heightPow1=(2*(m-targetX))*(2*(m-targetX));
heightPow2=(2*(targetX))*(2*(targetX));
int totalLength=Math.min((widthPow+heightPow1),(widthPow+heightPow2));
if(startY<targetY){
totalLength=Math.min(totalLength,(startY+targetY)*(startY+targetY));
}else{
totalLength=Math.min(totalLength,((n-startY)+(n-targetY))*((n-startY)+(n-targetY)));
}
ansList.add(totalLength);
}else if(targetY==startY){
int widthPow=(targetX-startX)*(targetX-startX);
int heightPow1,heightPow2;
//위로
heightPow1=(2*(n-targetY))*(2*(n-targetY));
//아래로
heightPow2=(2*(targetY))*(2*(targetY));
int totalLength= Math.min(widthPow+heightPow1,widthPow+heightPow2);
if(startX<targetX){
//왼쪽
totalLength=Math.min(totalLength,(startX+targetX)*(startX+targetX));
}else{
//오른쪽
totalLength=Math.min(totalLength,((m-startX)+(m-targetX))*((m-startX)+(m-targetX)));
}
ansList.add(totalLength);
}else{
int widthPow=(targetY-startY)*(targetY-startY);
int heightPow1,heightPow2;
//L
heightPow1=(startX+targetX)*(startX+targetX);
//R
heightPow2=(2*m-(startX+targetX))*(2*m-(startX+targetX));
int totalLength=Math.min(widthPow+heightPow1,widthPow+heightPow2);
int cpr=Math.min((startX-targetX)*(startX-targetX)+(2*n-startY-targetY)*(2*n-startY-targetY),(startX-targetX)*(startX-targetX)+(startY+targetY)*(startY+targetY));
totalLength=Math.min(totalLength,cpr);
ansList.add(totalLength);
}
}
return ansList.stream().mapToInt(i->i).toArray();
}
}
그냥 수학문제 였다..
다만, Integer List를 stream.mapToInt로 toArray를 사용해서 int array로 변환할 수 있다는 것을 알았다.