🔺 문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
🔺 코드
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 width = sum / i; // 가로
if(width >= i) {
if((i - 2) * (width - 2) == yellow) {
answer[0] = width; // 가로
answer[1] = i; // 세로
break;
}
}
}
return answer;
}
}
• 세로 ➡ 3 이상 (노란색 격자수가 1 이상이므로)
• 카펫 사이즈 경우의 수 ➡ (brown + yellow)의 약수 구하기
• yellow 갯수 ➡ (가로 - 2) * (세로 - 2)
풀이를 보고 나면 참 별게 아닌데(?) 나는 그 쉬워보이는 걸 못하고 있다... 답답하구만😶😶

🔺 다른 풀이들
[프로그래머스] 카펫 자바(JAVA)
츄르사려고 코딩하는 코집사입니다. 1. [프로그래머스] 카펫 자바(JAVA) 1) 문제 제목 : 카펫 2) 문제 출처 https://school.programmers.co.kr/learn/courses/30/lessons/42842 프로그래머스 코드 중심의 개발자 채용.
yongku.tistory.com
(+ 2회독 231018)
소인수분해를 활용했다.
yellow를 소인수분해해 나온 두 값 A와 B를 더하고 2를 곱하고, 꼭짓점 4개를 더해 sum의 갯수를 구한다.
이 때 sum의 갯수가 brown의 값보다 (작거나) 같다면,
카펫의 가로의 길이는 두 소인수 분해한 값 중 큰 값 + 2, 세로의 길이는 두 소인수 분해 한 값 중 작은 값 +2가 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import java.util.*;
class Solution {
public int[] solution(int brown, int yellow) {
int[] answer = new int[2];
// 소인수분해
for(int i = yellow ; i >= 1 ; i--) {
if(yellow % i == 0) {
int sum = (i + yellow / i) * 2 + 4;
if(sum <= brown) {
answer[0] = Math.max(i + 2, yellow/i + 2);
answer[1] = Math.min(i + 2, yellow/i + 2);
break;
}
}
}
return answer;
}
}
|
cs |

(+ 3회독 240711)
1) (가로 + 세로) = (brown - 꼭짓점 4개의 값)
2) 가로 * 세로 = yellow
이 두 식을 만족하는 x와 y를 찾고자 2중 for문을 활용한 완전탐색을 진행했다.... (비효율적)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import java.util.*;
class Solution {
public int[] solution(int brown, int yellow) {
int[] answer = new int[2];
for(int i = 1 ; i <= brown ; i++) {
for(int j = 1 ; j <= yellow ; j++) {
if(2 * i + 2 * j == (brown - 4) && (i * j == yellow)) {
if(i >= j) {
answer[0] = i+2;
answer[1] = j+2;
break;
}
}
}
}
return answer;
}
}
|
cs |

(참고)
[Java 자바] 프로그래머스 > Lv.2 카펫
https://programmers.co.kr/learn/courses/30/lessons/42842 코딩테스트 연습 - 카펫 Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양
yeoeun-ji.tistory.com
'코테 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Lv. 2] H-Index (0) | 2023.04.04 |
---|---|
[프로그래머스/Lv. 2] 행렬의 곱셈 (0) | 2023.04.03 |
[프로그래머스/Lv. 2] 영어 끝말잇기 (0) | 2023.04.02 |
[프로그래머스/Lv. 2] 짝지어 제거하기 (0) | 2023.04.02 |
[프로그래머스/Lv. 2] 이진 변환 반복하기 (0) | 2023.04.02 |