[Programmers / Level1] 161990. 바탕화면 정리(Java)

이하얀·2024년 7월 16일
0

🕊️ 프로그래머스

목록 보기
12/43

💡 Info




입출력 조건




입출력 예시




문제 이해


  • 바탕화면 상태가 주어지면 -> 한번에 삭제할 수 있는 최소 이동거리(드래그 시작점, 끝점) 구하기


알고리즘


풀이 시간 : 25분

  • 입력

    • 초기화 : 최소 행, 최소 열, 최대 행, 최대 열을 나타내는 변수 초기화
  • 계산

    • 문자 위치 찾기

    • 행 -> 열 순으로 돌 수 있도록 이중 for문으로 구성
    • 현재 위치에 파일이 있는 경우(#) -> 행, 열 값 갱신하기
  • 출력

    • 결과값 result 배열 출력하기
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[0].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, maxCol};
    }
}


오답체크


  • 테스트 결과 모두 실패하는 문제
    • 드래그하는 경우를 고려해서 최대값을 +1하기
//before
return new int[]{minRow, minCol, maxRow, maxCol};
//after
return new int[]{minRow, minCol, maxRow + 1, maxCol + 1};


최종 풀이


풀이 시간 : 40분(첫 풀이 시간 포함)

  • 입력

    • 초기화 : 최소 행, 최소 열, 최대 행, 최대 열을 나타내는 변수 초기화
  • 계산

    • 문자 위치 찾기

    • 행 -> 열 순으로 돌 수 있도록 이중 for문으로 구성
    • 현재 위치에 파일이 있는 경우(#) -> 행, 열 값 갱신하기
  • 출력

    • 결과값 result 배열 출력하기
    • 드래그하는 경우를 고려해서 최대값을 +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[0].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};
    }
}


결과


profile
언젠가 내 코드로 세상에 기여할 수 있도록, BE 개발 기록 노트☘️

0개의 댓글