[99클럽 코테 스터디] 26일차 TIL - 바탕화면 정리

Hoxy?·2024년 8월 16일
0

99클럽 코테 스터디

목록 보기
26/42
post-thumbnail

오늘의 학습 키워드

</> 시뮬레이션

공부한 내용 본인의 언어로 정리하기

class Solution {
    public int[] solution(String[] wallpaper) {
        // 초기값 설정:
        // minRow와 minCol은 가능한 가장 큰 값으로 초기화
        // 이는 발견된 # 문자의 행과 열 인덱스를 기준으로 최소값을 찾기 위함
        int minRow = wallpaper.length; // 가장 위의 행 번호 초기값: 배열의 전체 행 수
        int minCol = wallpaper[0].length(); // 가장 왼쪽 열 번호 초기값: 배열의 전체 열 수
        int maxRow = -1; // 가장 아래 행 번호 초기값: 배열의 유효 인덱스보다 작음
        int maxCol = -1; // 가장 오른쪽 열 번호 초기값: 배열의 유효 인덱스보다 작음
        
        // 모든 칸을 탐색
        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); // 현재까지 발견된 # 문자가 포함된 가장 오른쪽 열
                }
            }
        }
        
        // 최종적으로 발견된 # 문자가 포함된 영역의 경계값을 반환
        // maxRow + 1 및 maxCol + 1은 인덱스 기준으로 영역의 크기를 포함하기 위해 사용
        return new int[] {minRow, minCol, maxRow + 1, maxCol + 1};
    }
}

오늘의 회고

오늘 문제는 각 행의 위치에 있는 파일들을 최소값으로 드래그해서 전체 선택을 할 수 있게 하는 문제였다.
그래서 나는 바탕화면 전체를 순회하면서 각 최소 최대값을 구해서 파일을 포함하는 위치의 값을 배열로 리턴 시켜주었다.

코드만 보면 min 과 max 때문에 헷갈릴수 있는데 전체 배열 크기에서 가장 낮은값과 높은값을 구해야하기 때문에 저렇게 표기한 것으로 코드를 제대로 읽고 이해를 해야한다.

일단 처음에 맨 끝과 맨 앞의 값을 초기화 시켜 주었다.

int minRow = wallpaper.length;
int minCol = wallpaper[0].length();
int maxRow = -1; 
int maxCol = -1;

그리고 모든 칸을 순회시켜 확인해주었다.

 for (int i = 0; i < wallpaper.length; i++) { // 각 행을 순회
	for (int j = 0; j < wallpaper[i].length(); j++) { // 각 열을 순회
    
	}
}

이제 안에서 찾아야 할 값들을 Math 메서드를 이용해서 구해주었다.

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};

+1을 해준 이유는 그대로 둘 경우 영역의 크기에 포함이 되지않고 한칸이 작게 되어 선택되지 않기 때문에 +1을 해주어서 파일이 선택되게끔 만들었다.


내일 공부할 것 :

시뮬레이션 관련 코드나 문제들을 찾아봐야 할 것 같다.

문제

https://school.programmers.co.kr/learn/courses/30/lessons/161990

profile
하나부터 열까지 모든 것이 궁금한 개발자 취준생

0개의 댓글