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
- 인프런
- join
- 코틀린
- groupby
- MySQL
- navermap
- 우테코
- 정처기
- 코딩테스트
- 안드로이드
- 혼공단
- doitandroid
- java
- 혼공챌린지
- select
- 정보처리기사
- CS
- 우아한테크코스
- 안드로이드스튜디오
- 코딩
- Kotlin
- 코테
- SQL
- 프로그래머스
- Til
- 카카오코테
- Android
- 스터디
- 자바
- 혼공파
Archives
- Today
- Total
Welcome! Everything is fine.
[프로그래머스/Lv.1] 바탕화면 정리 - Java 본문
728x90
📌 문제
📌 풀이
직접 그림을 그려가며 푸니 바로 이해되는 문제였다. 그러나 Math.min()과 Math.max()를 사용해 최솟값과 최댓값을 구하는 과정에서 힌트를 찾아보았다. 머리로는 알아도 막상 코드로 구현하려니 바로바로 되진 않았다.
바탕화면에 파일이 예시처럼 있다면, 드래그 하는 시작점은 (가장 위쪽, 가장 왼쪽) 인 (0, 1) 이고, 끝점은 (가장 아래쪽, 가장 오른쪽) 인 (3, 4) 이다.
0 | 1 | 2 | 3 | 4 | 5 |
1 | # | ||||
2 | # | ||||
3 | # |
정리하면, wallpaper 배열을 이중 for문으로 돌며 '#' 가 포함되는 인덱스를 통해 아래 항목을 찾아낸다.
- 가장 위쪽에 있는 i → minRow
- 가장 왼쪽에 있는 j → minCol
- 가장 아래쪽에 있는 i → maxRow
- 가장 오른쪽에 있는 j → maxCol
'#'가 포함된다면 i과 j의 값을 Math.min(), Math.max() 함수에 넣고 최솟값과 최댓값을 비교해 기존의 값과 교체한다.
📌 전체 코드
마지막에 maxRow와 maxCol에 1을 더해준 것은 wallpaper를 순회할 때 시작점이 0이기 때문이다. 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);
}
}
}
return new int[] {minRow, minCol, maxRow + 1, maxCol + 1};
}
}
'프로그래머스 > Lv.1' 카테고리의 다른 글
[프로그래머스/Lv.1] PCCE 기출문제 10번 / 데이터 분석 - Java (0) | 2024.04.18 |
---|---|
[프로그래머스/Lv.1] 2016년 - Java (0) | 2024.04.18 |
[프로그래머스/Lv.1] 카드뭉치 - Java (0) | 2024.04.16 |
[프로그래머스/Lv.1] 개인정보 수집 유효기간(2023 KAKAO BLIND RECRUITMENT) - Java (0) | 2024.04.15 |
[프로그래머스/Lv.1] 달리기 경주 - Java (0) | 2024.04.12 |