반응형

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

[문제 설명]

 

코딩테스트를 준비하는 머쓱이는 프로그래머스에서 문제를 풀고 나중에 다시 코드를 보면서 공부하려고 작성한 코드를 컴퓨터 바탕화면에 아무 위치에나 저장해 둡니다.....이하 생략

 


우선 알고리즘 문제를 풀면서, 내가 가장 중요하게 생각하는 건 '복잡하게 생각하지 말자'이다. 물론 복잡한 알고리즘 문제도 있지만, 되려 복잡하게 생각하여 단순한 문제를 어렵게 접근하는 경우가 많았기 때문이다.

 

1. 주어진 wallpaper 배열의 length는 행(row)를, wallpaper 배열의 원소의 길이는 열(col)을 나타낸다.

 

 문제 특성상, String[] wallpaper의 원소 길이는 모두 같기 때문에 wallpaper[0]을 임의로 잡았다. 그리고 #이 존재하는 위치의 행과 열의 최소값과 최대값의 유무가 문제를 푸는데 키워드라는 것을 인지한다.

 

2. #이 들어가는 (최소 행, 최소 열), (최대 행 + 1, 최대 열 + 1)을 구한다.  

class Solution {
    public int[] solution(String[] wallpaper) {
        int minCol, maxCol;
        int minRow, maxRow;

        int row = wallpaper.length;
        int col = wallpaper[0].length();    //배열의 원소 길이는 같기에 wallpaper[0] 임의로 지정

        minCol = minRow = Integer.MAX_VALUE;
        maxCol = maxRow = Integer.MIN_VALUE;

        for(int i = 0; i < row; i++){
            for(int j = 0; j < col; j++){
                if(wallpaper[i].charAt(j) == '#'){
                    minRow = Math.min(minRow, i);
                    maxRow = Math.max(maxRow, i);
                    minCol = Math.min(minCol, j);
                    maxCol = Math.max(maxCol, j);
                }
            }
        }

        return new int[]{minRow, minCol, maxRow + 1, maxCol + 1};
    }
}

 

반응형

+ Recent posts