728x90
⬛ 프로그래머스 | LV.2 카펫
https://school.programmers.co.kr/learn/courses/30/lessons/42842
💚 문제 접근 방식
- 어떻게 풀어야 하는지 도저히 모르겠어서 풀이를 찾아봤고, 이해한 내용 토대로 정리했다.
- 문제 제한 조건을 잘 확인해야 한다.
1) 노란색 격자 yellow는 최소 1이상의 값이 반드시 들어온다.
즉, 적어도 1개의 노란 격자가 중앙에 반드시 존재해야 한다.
이를 만족시키려면 그림처럼 격자 크기가 가로, 세로 모두 3이상의 값을 가져야 한다.
2) 가로 길이 ≥ 세로 길이 (가로가 세로보다 크거나 같아야 한다.)
전체 카펫 사이즈 크기가 어떤 (가로, 세로) 크기로 구성될지 경우의 수를 좁히려면 (brwon+yellow 합) 에 대한 약수를 구해야 한다.
그 약수 중 (가로≥세로) 조건 만족하는 경우만 남긴다. 그러면 (4, 3) (6,2) (12,1) 만 남는다.
3) 또한 가로와 세로 길이는 모두 3이상이어야 하기 때문에 이를 만족 못하는 경우를 모두 제거하면 (4,3) 만 남게 된다.
4) 마지막으로 문제 입력에서 주어진 yellow 개수만큼 노란 격자가 중앙에 위치하는 게 가능하려면 아래의 수식을 만족해야 한다.
(가로-2) * (세로-2) = yellow 개수 // 이를 만족하는 경우에 정답 리턴
💚 제출 코드
import java.util.*;
class Solution {
public int[] solution(int brown, int yellow) {
int[] answer = new int[2];
int sum = brown + yellow;
//약수 구하기
for(int i=3; i<= sum; i++){
int j = sum / i; //sum 을 구성할 수 있는 약수 (i, j) 구하고
if(j >= 3){
int col = Math.max(i, j);//둘 중 큰값 가로
int row = Math.min(i, j);//둘 중 작은 값 세로
int mid = (col - 2) * (row - 2);
if(mid == yellow){
answer[0] = col; //가로
answer[1] = row; //세로
return answer;
}
}
}
return answer;
}
}
728x90
'코딩 테스트 [준비] > [문풀] 프로그래머스_문풀_조지기' 카테고리의 다른 글
프로그래머스 | LV.2 피로도 - 완전 탐색 (Java) (57) | 2023.12.31 |
---|---|
프로그래머스 | LV.2 모음 사전 - 완전 탐색 (Java) (54) | 2023.12.30 |
프로그래머스 | LV.2 소수 찾기 - DFS 문풀 (Java) (45) | 2023.12.29 |
프로그래머스 | LV.2 전력망을 둘로 나누기 - DFS 문풀 (Java) (48) | 2023.12.29 |
프로그래머스 | LV.2 할인 행사 - HashMap 문풀 (Java) (46) | 2023.12.28 |