[문제 링크]
https://school.programmers.co.kr/learn/courses/30/lessons/42842
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
[풀이 과정]
가로로 쭉
1개 -> 4변 + 4꼭지 8개
2개 -> 6변 + 4꼭지 10개
3개 -> 3*2 + 2 + 4꼭지 12개
4개 -> 4*2 + 2 + 4꼭지 14개
4/2 2*(2+2) + 4꼭지 12개
이렇게 적다보니 대충 어떻게 풀어야하는지 감이 왔다.
일단 yellow의 갯수를 확인 후 1부터 yellow까지 나누기를 한다.
1부터 나누는 수는 yellow를 가로로 몇개를 둘지 정하는 것이다.
문제에서 무조건 직사각형이나 정사각형이 되야한다고 했고 그럼 우리는 일단 yellow의 갯수가
1부터 올라가는 숫자로 나누어 떨어지는 것과 나누는 수가 몫보다 클때를 분류한다.
그럼 나누는 수는 yellow의 가로 수이고 몫은 yellow가 몇줄인지 나온다.
brown은 꼭지점에 하나씩 더 붙기 때문에 +4를 해줘야한다.
즉 2 * (나눈 수 + 몫) + 4 이 brown의 수랑 같은 값을 구하고 전체 사각형의 가로세로 길이를 구해서 return하면 풀린다.
[코드]
import java.util.*;
class Solution {
public int[] solution(int brown, int yellow) {
List<Integer> answer = new ArrayList<>();
for(int i = 1; i <= yellow; i++) {
System.out.println(i);
if(yellow % i == 0) {
if(i >= yellow / i) {
if(brown == 2 * (yellow / i + i) + 4) {
answer.add(i+2);
answer.add(yellow/i + 2);
break;
}
}
}
}
return answer.stream().mapToInt(i -> i).toArray();
}
}
[회고]
처음에는 막막했지만 계속 생각하다 보니 풀려서 기분이 좋네요.
질문과 피드백은 언제나 환영입니다.
감사합니다.
'CodingTest > Programmers' 카테고리의 다른 글
[Programmers] 전력망을 둘로 나누기 (1) | 2025.04.19 |
---|---|
[Programmers] 피로도 (1) | 2025.04.15 |
[Programmers] 소수 찾기 (1) | 2025.04.14 |
[Programmers] 모의고사 (1) | 2025.04.13 |
[Programmers] 최소직사각형 (0) | 2025.04.12 |