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로 변환할 수 있다는 것을 알았다.