본문 바로가기

공부/예제 풀이

[프로그래머스] 바탕화면 정리

처음 이해하는게 살짝 어려웠지 실제 풀이는 뚝딱 했다. 핵심은 드래그를 할 때 위에, 왼쪽은 그냥 값을 구해주면 되지만?

오른쪽, 아래는 +1을 붙여줘야함. 왜냐하면 좌표계에서 +1을 해줘야 그쪽까지 드레그가 됨.

 

이문제를 풀면서 썼던 아이디어는 왼쪽과 위에서 구할 때 시작 index는 0부터,

오른쪽과 아래를 구할 때 시작 index는 주어진 좌표계의 최대값으로 시작해서 줄이는 식.

 

ps. 좌표계 이상해서 한 5분 고민했음 왜 세로가 x고 가로가 y임..?

 

풀이

//발제자 좌표계 다시 배워라..
class Solution {
    public int[] solution(String[] wallpaper) {
        int[] answer = new int[4];
        int lux=0, luy=9999,rdx=0, rdy=0;
        
        //lux 구하기
        for(int i=0;i<wallpaper.length;i++){
            if(wallpaper[i].contains("#")) {
                lux =i;
                break;
            }
        }
        answer[0] = lux;
        
        //luy 구하기
        for(int i=wallpaper.length-1 ;i>=0 ; i--){
            if(wallpaper[i].contains("#")) {
                rdx =i;
                break;
            }
        }
        answer[2] = rdx+1;
        
        int index=0;
        
        for(int i=0;i<wallpaper.length;i++){
            for(int j=0;j<wallpaper[i].length();j++)
                if(wallpaper[i].charAt(j)==Character.valueOf('#')){
                    index= j;
                    luy = Math.min(index,luy);
                    break;
                }
        }
        answer[1] = luy;
        
        for(int i=0;i<wallpaper.length;i++){
            for(int j=wallpaper[i].length()-1;j>=0;j--)
                if(wallpaper[i].charAt(j)==Character.valueOf('#')){
                    index = j;
                    rdy = Math.max(index,rdy);
                    break;
                }
        }
        answer[3] = rdy+1;
        return answer;
    }
}