프로그래머스 위클리 문제
명함별 사이즈를 리스트에 담아주고 해당 명함들을 담을 케이스의 최적 크기를 구하는 문제.
다시 말해, 해당되는 명함들 한정해서 가장 작은 케이스의 크기를 구하는 것.
아래는 내가 이 문제를 푼 코드이다.
import java.util.Arrays;
class Solution {
public int solution(int[][] sizes) {
int answer = 0;
int[][] wh = new int[2][sizes.length];
int[] wh_max = {0,0};
for(int i=0; i<sizes.length;i++){
wh[0][i]=sizes[i][0];
wh[1][i]=sizes[i][1];
if(sizes[wh_max[0]][0]<sizes[i][0]){
wh_max[0]=i;
}
if(sizes[wh_max[1]][1]<sizes[i][1]){
wh_max[1]=i;
}
}
int[] ans = {1,0};
if(wh[0][wh_max[0]]>=wh[1][wh_max[1]]){
ans[0]=0;
ans[1]=1;
}
for(int i=0;i<sizes.length;i++){
if(i==wh_max[ans[0]]){continue;}
else if(wh[ans[0]][i]<wh[ans[1]][i]){
wh[ans[1]][i] = sizes[i][ans[0]];
}
}
return Arrays.stream(wh[0]).max().getAsInt()*Arrays.stream(wh[1]).max().getAsInt();
}
}
- wh 라는 변수에 각 명함들의 가로, 세로 크기를 2 X N 크기로 담아주었다.
- wh_max 는 각 가로, 세로 크기 중에 가장 큰 값을 갖는 인덱스의 위치를 저장한다.
- ans 는 가로, 세로의 Max 값 중, 어떤 값이 크냐에 따라 1과 0의 순서를 달리하는 리스트이다.
- 그리고 아래의 반복문을 통해 명함의 크기를 담고 있는 리스트들에 변화를 준다
- 만일, 가로 최대값이 세로 최대값보다 크다고할 때, 가로 크기를 담는 리스트에 큰값을 몰아준다.
- wh 리스트의 각 인덱스별 가로, 세로 크기를 비교하여 가로 크기가 세로 크기보다 작다면, 위치를 바꾼다.
- 가로 크기가 최대값이라 가정했기 때문에, 절대 세로값이 가로 맥스치보다 클 수는 없다.
그리고 가로, 세로 리스트의 각 최대값을 곱해 답을 도출.
이렇게 해당 문제를 풀었지만... 풀어 놓고 대충 봐도...
풀이가 너무 복잡하다...
그래서 다른 사람의 풀이를 참고하고 다시 복습하였다.
% Math.max 활용하기
class Solution {
public int solution(int[][] sizes) {
int wh_max = 0;
int wh_min = 0;
for(int[] wh : sizes){
if(wh[0]<wh[1]){
wh_max = Math.max(wh_max, wh[1]);
wh_min = Math.max(wh_min,wh[0]);
continue;
}
wh_max = Math.max(wh_max, wh[0]);
wh_min = Math.max(wh_min,wh[1]);
}
return wh_max * wh_min;
}
}
간단히 설명하면 해당 문제의 요지는 결국 가로 세로 크기를 비교해서
큰 녀석들 중에서의 최대값과 작은 녀석들 중의 최대값을 곱한다.
뭐 이런 표현이 맞을지는 모르겠다만 해당 코드를 설명하면
- wh_max와 wh_min이라는 int 변수 2개를 생성
- 반복문을 통해 각 명함들의 가로 세로 크기 비교
- 둘 중 큰 녀석은 wh_max에 작은 녀석은 wh_min에 담아준다.
- 단, 전에 저장한 값과 비교한다. 이때에 Math.max 라는 구문을 사용한다.
- Math.max 는 2개의 숫자를 비교해서 큰 값을 출력한다
- 최종적으로 wh_max와 wh_min의 값을 곱하여 return 한다.
무튼 이런식으로 해보았다.
최대한 언젠가 보게 될 코딩 테스트를 상정하고.. 30분이면 넉넉하다해서 시간을 쟀지만...
결국 좋은 수를 생각하지 못하니 저렇게 복잡하게 풀었나 싶기도 하다..
다음에는 람다 표현식을 좀 익혀서 해볼까 한다.
다른 사람 풀이 쭉 보니까 reduce랑 람다 표현식으로 풀었더라....
한번 공부해서 해보자
반응형
'끄적 > Java_CT' 카테고리의 다른 글
[자바 코테]백준 1756번 피자굽기 (0) | 2022.03.12 |
---|---|
[자바 코테] startsWith / 람다식 사용하기 (0) | 2021.11.21 |
[자바 코테] matches 활용 (0) | 2021.08.31 |
자바 코테 HashMap 활용 (0) | 2021.07.13 |
자바 코테 replaceAll 활용 (0) | 2021.07.09 |
댓글