728x90
반응형
https://github.com/ROUTINE-STUDY/Algorithm
알고리즘 스터디를 진행하고 있습니다. 😊
초보들로 구성되어있으며, 열심히 풀어보고 풀이 방식을 공유하고 피드백을 해주는 스터디입니다.
참여 문의는 댓글 혹은 GitHub 주소를 참고해주세요.
문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/86491
문제 설명
모든 명함을 담을 수 있는 가장 작은 명함지갑의 크기를 반환하세요.
풀이 방법
1. 각 명함의 가로, 세로 중 큰 값을 한쪽(가로)으로 정렬(SWAP)합니다.
2. 명함들 중 가로의 최댓값과 세로의 최댓값을 구하여 곱해주면 명함지갑의 크기입니다.
내 코드(JAVA)
public class Solution {
public int solution(int[][] sizes) {
int maxWidth = 0;
int maxHeight = 0;
for(int[] card : sizes) {
// 가로/세로 길이 중 세로가 더 크면 명함을 회전시킴(기준 바꿔도 상관없음)
if(card[0] < card[1]) {
int temp = card[0];
card[0] = card[1];
card[1] = temp;
}
// 가로, 세로 최대값 구하기
if(maxWidth < card[0]) maxWidth = card[0];
if(maxHeight < card[1]) maxHeight = card[1];
}
// 최대 가로 * 세로 = 명함지갑 크기
return maxWidth * maxHeight;
}
}
다른 사람 코드 분석 및 리팩토링
다른 분의 풀이를 보니 굳이 정렬(SWAP)을 할 필요가 없음을 확인했습니다.
명함의 가로/세로 중 큰 값은 큰 값끼리, 작은 값은 작은 값끼리 비교하여 명함지갑의 크기를 구할 수 있습니다.
위 풀이법을 토대로 다시 풀이한 코드입니다.
public int solution_2(int[][] sizes) {
int maxWidth = 0;
int maxHeight = 0;
for(int[] card : sizes) {
int max = Math.max(card[0], card[1]);
int min = Math.min(card[0], card[1]);
if(maxWidth < max) maxWidth = max;
if(maxHeight < min) maxHeight = min;
}
return maxWidth * maxHeight;
}
굳이 정렬(SWAP)하지 않아도 되고 깔끔하네요.
728x90
반응형
'알고리즘' 카테고리의 다른 글
[백준/JAVA] 4796. 캠핑 (0) | 2021.10.30 |
---|---|
[프로그래머스/JAVA] 없는 숫자 더하기 (0) | 2021.10.25 |
[LeetCode/JAVA] 1200. Minimum Absolute Difference (0) | 2021.09.14 |
[프로그래머스/JAVA] 복서 정렬하기 (0) | 2021.09.13 |
[프로그래머스/JAVA] 상호 평가 (0) | 2021.09.11 |
댓글