Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 스킬체크테스트
- 나머지가1
- Fullcalendar
- 스킬체크
- 월간코드챌린지시즌3
- 연습문제
- Android
- androidstudio
- level1
- Node
- Programmers
- REACT
- Summer/WinterCoding
- 동적웹페이지
- bootstrapModal
- 코딩테스트연습
- java
- 프로그래머스
- 코딩테스트
- 월간코드챌린지시즌2
- 안드로이드
- php
- 부트스트랩
- MSSQL
- 모달
- AJAX
- SimpleDateFormat
- bootstrap
- 백준
- modal
Archives
- Today
- Total
개발하는 고양이 오이
13. [JAVA] 프로그래머스 코딩테스트 연습 Level.1 - 최소직사각형° 본문
코딩테스트 - JAVA/프로그래머스 Programmers
13. [JAVA] 프로그래머스 코딩테스트 연습 Level.1 - 최소직사각형°
Cucum 2022. 4. 28. 15:32
https://programmers.co.kr/learn/challenges
프로그래머스 코딩테스트 연습 Level.1 - 최소직사각형
풀이
import java.util.*;
class Solution {
public int solution(int[][] sizes) {
int answer = 0;
int maxW = 0;
int maxH = 0;
for (int i = 0; i < sizes.length; i++) {
int temp = 0;
// 가로 길이보다 세로 길이가 더 길다면 변경
if (sizes[i][0] < sizes[i][1]) {
temp = sizes[i][0];
sizes[i][0] = sizes[i][1];
sizes[i][1] = temp;
}
// 가로 길이가 가장 긴 것
if (maxW < sizes[i][0]) {
maxW = sizes[i][0];
}
// 세로 길이가 가장 긴 것
if (maxH < sizes[i][1]) {
maxH = sizes[i][1];
}
}
answer = maxW * maxH;
return answer;
}
}
(풀이 실패 과정)
저는 이 문제를 처음에 단순하게 생각하지 못하고, 엄청 복잡하게 생각했습니다..
import java.util.*;
class Solution { // 틀린 코드
public int solution(int[][] sizes) {
int answer = 0;
int maxW = sizes[0][0];
int maxH = sizes[0][1];
int maxW_H = sizes[0][0];
int maxH_W = sizes[0][1];
int checkW = 0;
int checkH = 0;
for (int i = 0; i < sizes.length; i++) {
if (maxW < sizes[i][0]) { // 가로 중 가장 큰 수
maxW = sizes[i][0]; // 80
checkW = i; // 3
}
if (maxH < sizes[i][1]) { // 세로 중 가장 큰 수
maxH = sizes[i][1]; // 70
checkH = i; // 1
}
maxW_H = sizes[checkW][1]; // sizes[3][1] = 40
maxH_W = sizes[checkH][0]; // sizes[1][0] = 30
}
// 세로 중 가장 큰 수의 가로세로 변경
sizes[checkH][0] = maxH; // 30 -> 70
sizes[checkH][1] = maxH_W; // 70 -> 30
System.out.println(Arrays.deepToString(sizes));
int reMaxW = sizes[0][0];
int reMaxH = sizes[0][1];
int reCheckW = 0;
int reCheckH = 0;
// 70 < 80
if (maxH < maxW) { // 기존 세로 최대값(maxH)이 기존 가로 최대값(maxW)보다 작은지
for (int i = 0; i < sizes.length; i++) {
if (reMaxH < sizes[i][1]) { // 세로 중 가장 큰 수 다시 확인
reMaxH = sizes[i][1]; // 50
reCheckH = i; // 0
}
}
System.out.println(reMaxH);
System.out.println(reCheckH);
}
answer = maxW * reMaxH;
return answer;
}
}
가로들 중 가장 큰수를 찾고, 세로들 중 가장 큰 수를 찾은 후에, 숫자를 뒤집어서 비교하는 그런 복잡한 방법으로 2시간 가량 고생했습니다...
이 풀이는 답이 틀렸을뿐더러 100% 산으로 가고있는거같아서 검색을 통해 힌트를 보고서 알았습니다ㅜㅜ
가로: 두 변중에서 긴 부분
세로: 두 변중에서 작은 부분
가로를 두 변 중에서 가장 긴 부분으로 설정하고, 세로를 두 변 중에서 가장 짧은 부분으로 설정한 후에 비교하면 끝나는 문제였습니다.
즉, 공식적인 순서는
① 가로 세로 길이를 비교 한 후 가로 길이보다 세로 길이가 더 길다면 서로 변경
② 가로 길이 중 가장 긴 값 선택
③ 세로 길이 중 가장 긴 값 선택
④ 선택된 두 값을 곱한 후 return
저처럼 복잡하게 생각하면 끝도없이 길어질 코드고, 단순하게 생각하면 제가 해결한 코드보다도 더 짧아질 수 있는 코드입니다.
감사합니다.
'코딩테스트 - JAVA > 프로그래머스 Programmers' 카테고리의 다른 글
15. [JAVA] 프로그래머스 코딩테스트 연습 Level.1 - 핸드폰 번호 가리기, 짝수와 홀수 (0) | 2022.04.28 |
---|---|
14. [JAVA] 프로그래머스 코딩테스트 연습 Level.1 - 폰켓몬 (0) | 2022.04.28 |
12. [JAVA] 프로그래머스 코딩테스트 연습 Level.1 - 예산 / 2,6,18,19번 실패 해결 / 다른 사람의 풀이 (0) | 2022.04.28 |
11. [JAVA] 프로그래머스 코딩테스트 연습 Level.1 - 소수 만들기 (0) | 2022.04.27 |
10. [JAVA] 프로그래머스 코딩테스트 연습 Level.1 - 없는 숫자 더하기° (0) | 2022.04.27 |