✅ 문제
https://school.programmers.co.kr/learn/courses/30/lessons/161990
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
✅ 코드
class Solution {
public int[] solution(String[] wallpaper) {
int minHigh = Integer.MAX_VALUE;
int maxHigh = Integer.MIN_VALUE;
int minWeight = Integer.MAX_VALUE;
int maxWeight = Integer.MIN_VALUE;
for (int i = 0; i < wallpaper.length; i++) {
String row = wallpaper[i];
for (int j = 0; j < row.length(); j++) {
if (row.charAt(j) == '#') {
minHigh = Math.min(minHigh, i);
maxHigh = Math.max(maxHigh, i);
minWeight = Math.min(minWeight, j);
maxWeight = Math.max(maxWeight, j);
}
}
}
return new int[] {minHigh, minWeight, maxHigh + 1, maxWeight + 1};
}
}
✏️ 공부한점
일단 처음에 생각한건 indexOf로 해당 문자를 찾아서 최소 최대를 구하는거였는데 생각해보니까 같은줄에 여러개 문자가있을수도있어서 해당 방법을 사용하면 안됐다.
그리고 이번에 안 새로운사실인데 int의 Wrapper Class인 Integer를 사용하면 최대값과 최소값을
int minHigh = Integer.MAX_VALUE;
int maxHigh = Integer.MIN_VALUE;
int minWeight = Integer.MAX_VALUE;
int maxWeight = Integer.MIN_VALUE;
정수의 최대값은 231-1(2,147,483,647)이고,
정소의 최소값은 -231(-2,147,483,648)입니다.
이런식으로 구할수 있었다.
그리고 마지막에 maxHigh 와 maxWeight를 +1 하는이유는 끝에 범위까지 포함시키기 위해서다
🧠 시각적으로 이해해보기
그냥 maxHigh까지만 쓰면:
start = 1, end = 2 for (int i = 1; i < 2; i++) → i = 1까지만 돎! → row 2는 빠짐 (틀림)
maxHigh + 1로 쓰면:
start = 1, end = 3 for (int i = 1; i < 3; i++) → i = 1, 2 → row 1과 2 모두 포함됨 (정답!)
'Algorithm' 카테고리의 다른 글
| [JAVA 알고리즘] 지폐 접기 (0) | 2025.08.21 |
|---|---|
| [JAVA 알고리즘] 유연근무제 (0) | 2025.08.20 |
| [JAVA 알고리즘] 폰켓몬 (5) | 2025.08.07 |
| [알고리즘] 기본 정렬 알고리즘 (Sorting Algorithms) (4) | 2025.08.06 |
| [SQL 알고리즘] FrontEnd 개발자 찾기 (3) | 2025.07.31 |