https://school.programmers.co.kr/learn/courses/30/lessons/42842
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드
class Solution {
public int[] solution(int brown, int yellow) {
/*
yellow 로 만든 사각형의 가로,세로에 2씩 더하면 전체사각형의 크기가 된다.
brown의 개수는 전체사각형의 타일 개수 - yellow 타일 개수이다.
*/
/*
1. for : i 가 1부터 yellow 의 절반까지
1) yellow 를 i 로 나눠떨어질 때만
1] i 와 yellow 를 i 로 나눈 몫을 yellow 의 가로, 세로로 정한다.
2] 전체 사각형 크기에서 brown 개수를 구한다.
3] 주어진 brown 과 일치하는가?
1} 전체 사각형 크기를 리턴한다.
*/
int[] answer = new int[2];
int width = 0;
int height = 0;
int fullSquareSize = 0;
int calBrown=0;
if(yellow==1){
answer[0]=3;
answer[1]=3;
return answer;
}
for(int i=1; i<=yellow/2; i++){
if(yellow%i==0){
height = i+2;
width = yellow/i+2;
fullSquareSize = width*height;
calBrown = fullSquareSize - yellow;
if(calBrown==brown){
answer[0]=width;
answer[1]=height;
return answer;
}
}
}
return answer;
}
}
yellow 를 2개의 공약수들의 곱으로 표현하면, 이 경우의 수들이 yellow 로 표현가능한 사각형의 경우들이 된다.
따라서 위 경우들을 for 문을 돌며 하나씩 확인한다.
yellow 의 절반값 이후부터는 yellow 로 표현한 사각형의 가로, 세로를 변경한 것일뿐 크기는 같으므로 같은 사각형으로 간주한다.
주석에 적혀있듯 yellow 로 만든 사각형의 가로,세로 값에 2씩 더하면 brown을 포함한 전체 사각형의 가로, 세로가 된다.
전체 사각형의 크기가 곧 yellow+brown 이므로 yellow 를 빼면 해당 경우에서 계산된 brown 개수가 나온다.
이 계산된 brown 과 주어진 brown 이 일치할 때가 바로 정답이다.
위 로직대로 했을 때 예외의 경우는 발생하지 않는다.
약 20분정도 소요되었다.
'알고리즘 > 문제' 카테고리의 다른 글
| [프로그래머스] Lv2 예상대진표 / JAVA (0) | 2023.03.01 |
|---|---|
| <실패>[프로그래머스] Lv2 구명보트 / JAVA (0) | 2023.02.28 |
| [프로그래머스] Lv2 영어 끝말잇기 / JAVA (0) | 2023.02.26 |
| [프로그래머스] Lv2 다음 큰 숫자 / JAVA (0) | 2023.02.25 |
| [프로그래머스] Lv2 피보나치 수 / JAVA (0) | 2023.02.25 |
