
99클럽 코테 스터디 3일차 TIL - 프로그래머스 : 바탕화면 정리프로그래머스2025. 4. 2. 18:13
항해99 클럽 코테 스터디 3일차 TIL - 자바 미들러 4/2 (수요일)


✅ 문제
문자열 배열 wallpaper 가 있다. 빈칸은 . , 파일이 있는 칸은 # 값을 가진다. 최소한의 이동거리를 갖는 한 번의 드래그로 모든 파일을 선택해서 지우려고 한다.
드래그 방법
- 드래그는 바탕화면의 격자점 S(lux, luy)를 마우스 왼쪽 버튼으로 클릭한 상태로 격자점 E(rdx, rdy)로 이동한 뒤 마우스 왼쪽 버튼을 떼는 행동입니다.
- 이때, "점 S에서 점 E로 드래그한다"고 표현하고 점 S와 점 E를 각각 드래그의 시작점, 끝점이라고 표현합니다.
- 점 S(lux, luy)에서 점 E(rdx, rdy)로 드래그를 할 때, "드래그 한 거리"는 |rdx - lux| + |rdy - luy|로 정의합니다.
- 점 S에서 점 E로 드래그를 하면 바탕화면에서 두 격자점을 각각 왼쪽 위, 오른쪽 아래로 하는 직사각형 내부에 있는 모든 파일이 선택됩니다.
제한사항
- 1 ≤ wallpaper의 길이 ≤ 50
- 1 ≤ wallpaper[i]의 길이 ≤ 50
- wallpaper의 모든 원소의 길이는 동일합니다.
- wallpaper[i][j]는 바탕화면에서 i + 1행 j + 1열에 해당하는 칸의 상태를 나타냅니다.
- wallpaper[i][j]는 "#" 또는 "."의 값만 가집니다.
- 바탕화면에는 적어도 하나의 파일이 있습니다.
- 드래그 시작점 (lux, luy)와 끝점 (rdx, rdy)는 lux < rdx, luy < rdy를 만족해야 합니다.
📌 접근방법
- 이중 for문을 사용하여 #을 찾는다.
- 최소값 (lux, luy), 최대값 (rdx, rdy) 갱신
- 드래그의 끝점(rdx, rdy)에서 +1 추가
🔑 풀이
class Solution {
public int[] solution(String[] wallpaper) {
int minRow = Integer.MAX_VALUE;
int minCol = Integer.MAX_VALUE;
int maxRow = Integer.MIN_VALUE;
int maxCol = Integer.MIN_VALUE;
for(int i = 0; i < wallpaper.length;i++) {
for(int j = 0; j < wallpaper[i].length(); j++) {
if(wallpaper[i].charAt(j) == '#') {
minRow = Math.min(minRow, i);
minCol = Math.min(minCol, j);
maxRow = Math.max(maxRow, i);
maxCol = Math.max(maxCol, j);
}
}
}
int[] answer = {minRow, minCol, maxRow + 1, maxCol + 1};
return answer;
}
}
Integer.MAX_VALUE를 사용한 이유 : 최소값을 찾아야하므로 큰 값으로 초기화 필요.
Integer.MIN_VALUE를 사용한 이유 : 최대값을 찾아야하므로 작은 값으로 초기화 필요.
마지막에 우하단 좌표에 각각 1을 더하는 이유는 #이 있는 마지막 행과 열을 포함시키려면 1을 더해줘야한다.
🧐 회고
생각보다 바로 풀이법이 떠오르지 않고 꽤 고민했다.
가끔 배열 관련된 문제도 풀면서 익숙해져야겠다.
'프로그래머스' 카테고리의 다른 글
[프로그래머스] 롤케이크 자르기 - LV2 (1) | 2025.02.14 |
---|---|
[프로그래머스] 오픈채팅방 - LV 2 (3) | 2025.02.12 |
[프로그래머스] 디펜스 게임 - LV 2 (0) | 2025.02.12 |
[프로그래머스] 콜라 문제 (0) | 2024.09.30 |
[프로그래머스] 가장 가까운 같은 글자 (1) | 2024.09.25 |
@킴준현 :: 차근차근 꾸준히
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!