728x90
programmers.co.kr/learn/courses/30/lessons/42842
약수를 통해서 푸는 건 알았지만, 로직에 오류가 생겼다.
풀이보니까 굉장히 간단하게도 풀 수 있던데 진짜 경외롭다.
로직 오류 해결 완료 ✅
내 풀이 (미완)
public class Carpet0323 {
public int[] solution(int brown, int yellow) {
int[] answer = new int[2];
//yellow가 1이 아닌 제곱수라면 예) 4, 9 ...
int square = (int)Math.sqrt(yellow)*10/10;
if(yellow!=1 && yellow==square*square){
//정사각형 모양 배치
if((square*4)+4==brown){
answer = new int[]{square, square};
return answer;
}
}else{
int prime = 0;
List<Integer> innerWidth = new ArrayList<Integer>();
for(int i=1;i<=yellow;i++){
//약수 집합 구하기
if(yellow%i==0){
prime++;
innerWidth.add(i);
//System.out.println("innerWidth"+innerWidth);
}
}
//약수 갯수로 판단
if(prime>2) {
//카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.
//내부 노란색의 최소 가로길이 : prime/2 번째
for(int i=prime/2;i<prime;i++){
int y_Width = innerWidth.get(i);
int y_Height = yellow/innerWidth.get(i);
// brown => (yellow 가로+세로)*2 +4
if(brown==(y_Width+y_Height)*2+4){
answer = new int[]{y_Width+2, y_Height+2};
return answer;
}
}
}else{
// yellow가 소수라면
// 약수가 1과 자기자신 뿐이라면 예_7 (1*7)
answer = new int[]{yellow + 2, 3};
return answer;
}
}
return answer;
}
}
내 풀이 ( 완성 ✅ )
public int[] solution(int brown, int yellow) {
int[] answer = new int[2];
int prime = 0;
List<Integer> innerWidth = new ArrayList<>();
for(int i=1;i<=yellow;i++){
//약수 집합 구하기
if(yellow%i==0){
prime++;
innerWidth.add(i);
}
}
//약수 갯수로 판단
if(prime>2) {
for(int i=0;i<prime;i++){
int y_Width = innerWidth.get(i);
int y_Height = yellow/innerWidth.get(i);
//카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.
// brown => (yellow 가로+세로)*2 +4
if(y_Width>=y_Height && brown==(y_Width+y_Height)*2+4){
return answer = new int[]{y_Width+2, y_Height+2};
}
}
}else{
// yellow가 소수라면 => 약수가 1과 자기자신 뿐이라면 예:7 (1*7)
return answer = new int[]{yellow + 2, 3};
}
return answer;
}
미완성 코드에서 카펫 노란색 부분이 정사각형일때를 따로 구분했던 내용을 지우고, 가로 세로 길이 관련 조건을 추가해주었더니 모든 테스트케이스를 통과하였다.
풀이
import java.util.ArrayList;
import java.util.List;
class Solution {
public int[] solution(int brown, int yellow) {
for(int i=1; i<=yellow; i++) {
if(yellow%i==0 && (yellow/i+i)*2+4==brown) {
return new int[] {yellow/i+2, i+2};
}
}
return null;
}
}
아예 for문에서 약수확인이랑 brown 확인을 동시에 해주고 return 한 풀이
return 부분 가로 값을 어떻게 저렇게 생각해 낸 걸까
728x90
'코딩테스트' 카테고리의 다른 글
[LeetCode] 21. Merge Two Sorted Lists (0) | 2021.03.25 |
---|---|
[Programmers] 오픈채팅방 (0) | 2021.03.24 |
[Programmers] 주식가격 (0) | 2021.03.23 |
[LeetCode] 169. Majority Element (4) | 2021.03.19 |
Sort a HashMap in Java - (5) Using the Guava library (4) | 2021.03.18 |