https://school.programmers.co.kr/learn/courses/30/lessons/42842
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
이번 문제에서는 입출력의 패턴을 분석하여 풀려고 했다.
<내가 알아낸 패턴>
- 가로 * 세로 = brown + yellow
- (가로-1)*2 + (세로-1)*2 = brown
가로 * 세로가 전체 카펫의 넓이 인데, 세로가 가로보다 더 짧기 때문에 세로값을 이용하여 소인수 분해 공식을 활용 하였다.
세로의 길이가 정해지면 가로의 길이는 자동으로 정해지므로 가로 세로의 길이를 이용하여 조건 2를 사용하여 만족 여부를 확인하고 반환 해주면 정답이 된다.
import java.util.*;
class Solution {
public int[] solution(int brown, int yellow) {
int extent = brown + yellow; // 전체 타일 개수
for (int height = 2; height <= Math.sqrt(extent); height++) {
if (extent % height == 0) { // 세로 길이가 약수인 경우
int width = extent / height; // 가로 길이 계산
// 조건 확인
if ((width - 1) * 2 + (height - 1) * 2 == brown) {
return new int[]{width, height}; // 조건을 만족하면 반환
}
}
}
return new int[0]; // 조건을 만족하는 경우가 없으면 빈 배열 반환
}
}
2025년 03월 19일
새롭게 알아낸 풀이
노란색의 갯수 = (가로-2) * (새로-2)
import java.util.*;
class Solution {
public int[] solution(int brown, int yellow) {
int sum = brown+yellow;
boolean[] visit = new boolean[sum+1];
int a=0;
int b=0;
int ans_a=0;
int ans_b=0;
for(int i=1; i<sum; i++){
if(sum%i==0){
a = sum/i;
b = i;
if((a-2) * (b-2) == yellow){
ans_a=a;
ans_b=b;
break;
}
}
}
int[] answer = new int[2];
if(ans_a>ans_b){
answer[0]=ans_a;
answer[1]=ans_b;
}
else{
answer[0]=ans_b;
answer[1]=ans_a;
}
return answer;
}
}
'알고리즘 > 완전탐색' 카테고리의 다른 글
프로그래머스 - 모음사전 (0) | 2025.01.21 |
---|---|
프로그래머스 - 피로도 (1) | 2025.01.20 |
프로그래머스 - Lv2 소수찾기(Java) (0) | 2025.01.19 |
프로그래머스 - 모의고사(Java) (0) | 2025.01.14 |
프로그래머스 - 최소직사각형(Java) (0) | 2025.01.13 |