TIL Java

내일배움캠프 36일차 TIL _ 8주 2일차

mad038 2024. 6. 4. 22:25

 

  • 오늘 있었던 일
    • 팀과제
    • 알고리즘

팀과제

 

알고리즘 문제 풀기

     ● 카펫

더보기

● 카펫  //링크

class Solution {
    public int[] solution(int brown, int yellow) {

        int min = 0;

        brown = (brown -4)/2;
        int[] answer = {brown,min};
        for (int x = 0; x < brown; x++) {
            if(x*(brown - x) == yellow) {
                answer[0] = brown- x +2;
                answer[1] = x+2;
                break;
            }

        }
        return answer;
    }
}
  • 꼭지점을 빼면 결국 최소 높이와 나머지를 구하면 된다.. 
    • 기본값의 최소 높이 값을 구하고 길이를 구했다.
  • 밑은 다른 사람의 풀이
  • import java.util.*;
    class Solution {
        public int[] solution(int brown, int red) {
            int a = (brown+4)/2;
            int b = red+2*a-4;
            int[] answer = {(int)(a+Math.sqrt(a*a-4*b))/2,(int)(a-Math.sqrt(a*a-4*b))/2};
            return answer;
        }
    }
  • 제작자 코멘트
  • a는 완성된 카펫의 가로+세로입니다. b는 왜 저런식으로 써 놓으셨는진 모르겠지만 그냥 주어진 타일의 개수를 모두 합친 값입니다. 궁극적으로 answer 안에서 값을 구하는 방법을 기하학 적으로 보자면 우선 카펫의 가로 + 세로, 즉 a를 한변으로 하는 정사각형을 만든 후, 카펫모양으로 정사각형의 네 귀퉁이를 잘라내면, 즉 - 4 * b를 하면 가운데에 정사각형 형태의 타일이 남습니다. 루트를 이용하여 그 정사각형의 한 변의 길이를 구해주는데 그 한 변의 길이가 완성된 카펫의 가로와 세로의 길이 차이가 됩니다. 그러므로 더 긴쪽, 즉 가로를 구하기 위해선 가로와 새로를 더한 값에 차이를 더해주고 2로 나누고, 짧은 쪽을 구하기 위해선 빼고 2로 나눠주면 됩니다. 그림으로 그려보면 이해가 더 쉬운것 같네요.

 


당일 회고

  • 깃허브가 안돼서 같은 작업을 16번 반복하니 됐다.. 어째서?깃허브 나제 우고칸!