https://school.programmers.co.kr/learn/courses/30/lessons/42842
🌘문제 이해하기
노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫
갈색 격자 의 가로는 노란색 격자의 가로 길이 + 2
갈색 격자 의 세로는 노란색 격자의 세로 길이 + 2
갈색 격자의 가로,세로 길이는 전체카펫의 가로,세로 길이 이기도 하다.
즉 갈색 격자 개수 = 전체 카펫의 격자 개수 - 노란색 격자의 개수 의 규칙을 찾아내면 된다.
🚨6,7,8,9 문제만 오류가 발생하는 경우
노란색 격자의 가로,세로 길이를 구할 때 약수인지 확인해야한다.
예를 들어 노란색 격자가 총 15개 일때
세로를 2 로 계산하면 15/2 = 7 가로가 7로 계산 될수 가 있다.
2 x 7 = 14 != 15
노란색 격자의 개수가 동일하지 못한 경우를 주의해야한다.
🌗문제 자세히보기
1. 노란색 격자의 개수로 세로 , 가로 길이를 임의로 구한다. (세로길이는 1부터 시작한다)
세로의 길이가 노란색 총 격자의 개수의 약수가 아닌경우 세로의 길이를 증가해서 다시 계산
int y_height = 1; //노란색 세로 길이
int y_width = 0; //노란색 가로 길이
// yellow 의 height 1 부터 그에 맞춘 width될 수 있는 경우로 크기를 구한다.
if(yellow % y_height == 0)
y_width = yellow/y_height;
else
{
y_height++;
continue;
}
2. 노란색 길이가 구해지면 이에 맞게 전체 카펫의 가로 , 세로 길이 계산
int c_height = 0; //카펫 세로 길이
int c_width = 0; //카펫 가로 길이
//전체카펫의 크기는 yellow 의 height+2 , width+2 이다
c_height = y_height+2;
c_width = y_width+2;
3. 전체카펫 개수 - 노란색 격자 개수 = 갈색 격자 개수
int brown_carpet = 0; //갈색 격자 총 개수
int carpet = 0; //총 카펫 개수
//전체카펫 - yellow = brwon
carpet = c_height * c_width;
brown_carpet = carpet - yellow;
4. 계산된 갈색 격자 개수가 주어진 갈색 격자 개수와 동일하면 종료
다르면 노란색 세로 길이 증가 해서 다시 계산
//동일하다면 카펫의 가로 , 길이
if(brown_carpet == brown)
{
answer = new int[]{c_width,c_height};
}
else
{
//노란색 height 1증가
y_height++;
}
위의 방식을 while문을 돌려 계산된 갈색 격자 와 주어진 갈색 격자의 개수가 동일할때까지 구한다.
🌕 최종코드
public static int[] solution(int brown, int yellow)
{
int[] answer = {};
int y_height = 1; //노란색 세로 길이
int y_width = 0; //노란색 가로 길이
int c_height = 0; //카펫 세로 길이
int c_width = 0; //카펫 가로 길이
int brown_carpet = 0; //갈색 격자 총 개수
int carpet = 0; //총 카펫 개수
while(brown != brown_carpet)
{
// yellow 의 height 1 부터 그에 맞춘 width될 수 있는 경우로 크기를 구한다.
if(yellow % y_height == 0)
y_width = yellow/y_height;
else
{
y_height++;
continue;
}
//전체카펫의 크기는 yellow 의 height+2 , width+2 이다
c_height = y_height+2;
c_width = y_width+2;
//전체카펫 - yellow = brwon
carpet = c_height * c_width;
brown_carpet = carpet - yellow;
//동일하다면 카펫의 가로 , 길이
if(brown_carpet == brown)
{
answer = new int[]{c_width,c_height};
}
else
{
//노란색 height 1증가
y_height++;
}
}
return answer;
}
'항해' 카테고리의 다른 글
[Day23]JAVA 프로그래머스 소수 찾기(완전탐색, 백트래킹) (1) | 2024.11.19 |
---|---|
[Day22]JAVA 프로그래머스 피로도(완전탐색) (1) | 2024.11.18 |
[Day20]JAVA 프로그래머스 모의고사 (1) | 2024.11.16 |
[Day19]JAVA 백준 강의실(1374번) (1) | 2024.11.15 |
[Day18]JAVA 백준 센서(2212번) (0) | 2024.11.14 |