알고리즘
항하99 TIL 3일차(바탕화면 정리/프로그래머스)
순원이
2024. 3. 28. 22:28
문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1 번째 시도
아이디어: 그리드 / 현재 상황 속에서 최적인 해 구하기
- 정렬하지 않은 배열을 다 돈다.
- x1,y1의 최솟값을 구하고 x2,y2의 최댓값을 업데이트 해간다.
import java.util.*;
class Solution {
public int[] solution(String[] wallpaper) {
int height = wallpaper.length;
int width = wallpaper[0].length();
int lux = Integer.MAX_VALUE;
int luy = Integer.MAX_VALUE;
int rdx = Integer.MIN_VALUE;
int rdy = Integer.MIN_VALUE;
for(int i =0; i<height; i++) {
for(int j=0; j < width; j++) {
if(wallpaper[i].charAt(j) == '#') {
lux = Math.min(lux, i);
luy = Math.min(luy, j);
rdx = Math.max(rdx, i);
rdy = Math.max(rdy, j);
}
}
}
int[] answer = {lux, luy, rdx+1, rdy+1};
return answer;
}
}
한 방에 성공했다!
오늘도 어김없이 성공했을지라도 다른 사람의 코드를 보며 배울 점을 더 얻어가겠다.
그럴려고 했지만 다른 사람의 풀이도 다 나와 같고 특별한 풀이가 안 보여서 이번 문제는 이쯤으로 넘어가겠다.
+) 이번 문제가 그리드 알고리즘이 맞나?
그리드 알고리즘이란 어떤 문제에 대해서 탐욕적으로 즉 "현재 상황에서 지금 당장 좋은 것만 고르는 방법"으로 문제를 해결하는 방법이다. for문을 돌면서 최솟값과 최댓값을 찾음으로 그리드 알고리즘 문제라고 명했다. 이 문제가 그리드 알고리즘 문제인지 정확한 기준이 안세워진다.