TIL
99클럽 코테 스터디 26일차 TIL (시뮬레이션)
malang J
2024. 8. 17. 01:45
JAVA / Lv 1. 바탕화면 정리
문제
- 입력 조건:
- 문자열 배열 wallpaper가 주어집니다.
- 바탕화면의 가장 왼쪽 위를 (0, 0)으로 시작해 (세로 좌표, 가로 좌표)로 표현합니다.
빈칸은 ".", 파일이 있는 칸은 "#"의 값을 가집니다
- 문제:
- 문자열 배열 wallpaper가 매개변수로 주어질 때 바탕화면의 파일들을 한 번에 삭제하기 위해
최소한의 이동거리를 갖는 드래그의 시작점과 끝점을 담은 정수 배열을 반환하세요.
- 문자열 배열 wallpaper가 매개변수로 주어질 때 바탕화면의 파일들을 한 번에 삭제하기 위해
- 출력:
- 드래그의 시작점이 (lux, luy), 끝점이 (rdx, rdy)라면 정수 배열 [lux, luy, rdx, rdy]를 return하면 됩니다.
제한사항
- 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를 만족해야 합니다.
입출력 예
문제 해결
- 초기화 배열 생성: 최대값, 최소값 활용으로 인해 MAX_VALUE, MIN_VALUE로 초기화합니다.
- 이중 반복문 생성: 입력으로 주어진 배열의 각 요소가 '#'인지 확인합니다.
그리고 시작점의 경우 최대한 작아야하고, 끝점의 경우 최대한 커야합니다.
일부러 크게 만들었던 answer[0]은 '#'이 나올 시 그 즉시 answer[0]값과 i(세로)값을 비교해 작은 값을 넣습니다.
answer[1]도 동일하고 j(가로)값을 넣습니다.
일부러 작게 만들었던 answer[2]은 '#'이 나올 시 그 즉시 answer[2]값과 i+1(세로)값을 비교해 큰 값을 넣습니다.
answer[3]도 동일하고 j+1(가로)값을 넣습니다. - 결과 반환: 이중루프가 종료될 때 완성한 배열 시작점, 끝점을 반환합니다.
나의 풀이
class Solution {
public int[] solution(String[] wallpaper) {
int[] answer = new int[]{
Integer.MAX_VALUE, // 최대한 작은 값을 넣어야하므로 최대한 큰 값으로 초기화
Integer.MAX_VALUE,
Integer.MIN_VALUE, // 최대한 큰 값을 넣어야하므로 최대한 작은 값으로 초기화
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) == '#'){
answer[0] = Math.min(i, answer[0]); // 시작점(세로)
answer[1] = Math.min(j, answer[1]); // 시작점(가로)
answer[2] = Math.max(i+1, answer[2]); // 끝점(세로)
answer[3] = Math.max(j+1, answer[3]); // 끝점(가로)
}
}
}
return answer;
}
}
위와 왼쪽은 최소로, 아래와 오른쪽은 최대로
회고
- int 변수 4개 선언한 것을 배열로 바꿔서 초기화 할 수 있었다
- String[]2차요소 접근시
wallpaper[i].length - (X)
wallpaper[i].length() - (O)