https://school.programmers.co.kr/learn/courses/30/lessons/86491
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
완전탐색
들어가기에 앞서 내 뻘짓을 되돌아본다 , ,
문제를 읽은 후 초기 배열에서 구한 최대 최소를 저장하고난 후에 y,x 바꿔가면서 조건 체크하고, swap해주면서 최댓값 갱신하면 되겠구나... 뭐 이런 반복문을 몇번이나 써야되는지 모를 이상한 로직을 세웠다.
결과는? 30분 삽질 ㅠ_ㅠ
import java.io.*;
import java.util.*;
class Solution {
public int solution(int[][] sizes) {
int answer = 0;
int lenR = sizes.length; //row의 수 2
int lenC = sizes[0].length; //column의 수 4
int maxW = 0; int maxH = 0;
for(int y = 0; y < lenR; y++){
int max = -1;
for(int x = 0; x < lenC; x++){
if(sizes[y][x] > max) {
max = sizes[y][x];
if(y == 0) maxW = max;
else maxH = max;
}
}
}
//maxW = 80, maxH = 70;
for(int y = 0; y < lenC; y++){ //0,1,2,3
for(int x = 0; x < lenR; x++){ //0,1
if(sizes[y][x]) ...
}
}
return answer;
}
}
그렇다.. 이것은 삽질한 코드의 일부이다.
시간복잡도도 엉망일 것 같고 이렇게 푸는 문제일리 없다.. 하고 무언가 잘못됨을 깨달음.
아이패드 켜서 그림을 그려보는 와중에 배열의 행을 기준으로 더 긴 값을 w(width)에, 더 짧은 값을 h(height)에 할당하고 각각에 대한 최댓값을 구하면 끝날 것 같다는 깨달음을 얻고 엄청난 허무함을 느꼈다.
왜 나는 swap에 집착하였는가 . . .
import java.io.*;
import java.util.*;
class Solution {
public int solution(int[][] sizes) {
int answer = 0;
int maxW = -1; int maxH = -1;
int len = sizes.length;
for(int i = 0; i < len; i++){
int w = Math.max(sizes[i][0], sizes[i][1]);
int h = Math.min(sizes[i][0], sizes[i][1]);
maxW = Math.max(w, maxW);
maxH = Math.max(h, maxH);
}
answer = maxW*maxH;
return answer;
}
}
★문제에 주어진 워딩에 집착하지 않기
★무작정 코드부터 써내려가지 말고 문제의 숨은 의도를 파악하기
'Algorithms > programmers' 카테고리의 다른 글
[이분탐색] 징검다리 건너기 (0) | 2024.01.23 |
---|---|
[이분탐색] 프로그래머스 입국심사 (0) | 2024.01.11 |
[Greedy] 프로그래머스 체육복, 큰 수 만들기, 구명보트, 단속카메라 (1) | 2023.12.28 |
[Dynamic Programming] 프로그래머스 정수삼각형 (0) | 2023.12.26 |
[DFS/BFS] 프로그래머스 타겟넘버, 네트워크 (1) | 2023.12.22 |