728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/86491
해설
가장 작은 명함지갑을 만드는 문제입니다.
가로, 세로를 맞춰 계산해 본다면 2의 10000제곱의 반복횟수를 가지게 되어 시간이 너무 오래걸립니다.
그래서 가로, 세로가 아닌 각 명함을 긴 면(B), 짧은 면(S)으로 정리한다면 긴 면들이 한 쪽으로 모여 가장 작은 지갑을 만들 수 있게됩니다.
sizes의 각 요소별 가로, 세로값을 Math.max, Max.min으로 긴 면, 짧은 면을 구하여 모든 명함이 들어가도록 기존의 것과 비교해 큰 것을 남겨 최종적으로 명함지갑의 가로, 세로길이가 되도록 합니다.
주의점
- w, h는 최대 1000이므로 둘을 곱해도 int로 오류없이 계산가능하며 최소 1이므로 예상 못한 결과가 나오지 않는다.
코드
class Solution {
public int solution(int[][] sizes) {
int answer = 0;
int B = 0, S = 0;
for(int[] size : sizes){
B = Math.max(B, Math.max(size[0],size[1]));
S = Math.max(S, Math.min(size[0],size[1]));
}
return B * S;
}
}
728x90
'[IT] 코딩테스트 > [문제 및 풀이] 프로그래머스' 카테고리의 다른 글
[프로그래머스] 로또의 최고 순위와 최저 순위 / 자바(Java) (0) | 2023.08.24 |
---|---|
[프로그래머스] 없는 숫자 더하기 / 자바(Java) (0) | 2023.08.23 |
[프로그래머스] 개인정보 수집 유효기간 / 자바(Java) (0) | 2023.08.16 |
[프로그래머스] 숫자 짝궁 / 자바(Java) (0) | 2023.08.15 |
[프로그래머스] 햄버거 만들기 / 자바(Java) (0) | 2023.08.14 |