프로그래머스의 최소직사각형을 풀어보았습니다.
링크
https://school.programmers.co.kr/learn/courses/30/lessons/86491
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제


풀이
모든 명함을 수납할 수 있는 가장 작은 지갑을 만들어야 합니다.
매개변수로 주어진 sizes에서 가로, 세로 각각 최대 값으로 지갑을 만들어야 합니다.
하지만 가로, 세로 값은 변경될 수 있다는 점을 고려해서 만들어야 합니다.
ex.
A명함: 가로(60), 세로(50)
B명함: 가로(40), 세로(80)
A명함과 B명함의 가로 최대 값(60), 세로 최대 값(80)으로 만들면
60*80 = 4800
4800이라는 결과 값이 나옵니다.
하지만 B명함의 방향을 눕혀서 가로와 세로 길이를 바꾼다면 달라집니다.
ex.
A명함: 가로(60), 세로(50)
B명함: 세로(80), 가로(40)
위의 상황이라면 가로 최대 값(80), 세로 최대 값(50)으로
80*50 = 4000
4000이라는 결과 값이 나옵니다.
모든 명함을 수납할 수 있는 가장 작은 지갑을 만들 때, 가장 작게 만들 수 있는 지갑의 크기를 구하면 됩니다.
1. 각 명함의 가로, 세로 길이를 큰 값과 작은 값으로 구분합니다.
2. 저장되어 있는 큰 길이와 현재 명함의 큰 길이 값을 비교하여 현재 명함 길이가 더 크다면 현재 명함의 큰 값으로 바꿔줍니다.
3. 저장되어 있는 작은 길이와 현재 명함의 작은 길이 값을 비교하여 현재 명함 길이가 더 크다면 현재 명함의 작은 값으로 바꿔줍니다.
4. 모든 명함 값을 체크한 후 저장되어 있는 큰 길이와 작은 길이를 곱해서 결과를 반환합니다.
public int solution(int[][] sizes) {
int max = 0;
int min = 0;
for (int[] size : sizes) {
max = Integer.max(Integer.max(size[0], size[1]), max);
min = Integer.max(Integer.min(size[0], size[1]), min);
}
return max * min;
}

후기
* 난이도 (5점 만점)
5 : 풀 줄 알면 기업 코딩 테스트는 문제없음.
4 : 평균적인 기업 코딩 테스트의 중간 이상.
3 : 평균적인 기업 코딩테스트의 쉬운 문제.
2 : 알고리즘 문제를 연습하고 있다면 풀 수 있는 문제.
1 : 시간이 오래 걸리지 않고, 누구나 풀 수 있는 문제.
프로그래머스의 최소직사각형 문제는 알고리즘 공부를 하지 않았더라도 어렵지 않습니다.
문제를 이해하고 푼다면 누구나 풀 수 있는 문제라고 생각합니다.
'프로그래머스' 카테고리의 다른 글
[프로그래머스] 소수 찾기 (0) | 2022.10.21 |
---|---|
[프로그래머스] 모의고사 (0) | 2022.10.19 |
[프로그래머스] 문자열을 정수로 바꾸기 (0) | 2022.10.18 |
[프로그래머스] 완주하지 못한 선수 (0) | 2022.10.15 |
[프로그래머스] 폰켓몬 (0) | 2022.10.14 |