TIL

2023-10-26 TIL(프로그래머스)

우성팔 2023. 10. 26.

바탕화면 정리


드래그를 최상단 좌측 → 최하단 우측 으로 해야 최단 거리이므로

드래그를 시작 하기 위한 

x좌표는 파일이 있는("#"표시가 있는) 곳의  x,y 값들 중 최솟값일 때 

y좌표는 파일이 있는("#"표시가 있는) 곳의  x,y 값들 중 최댓값일 때의 + 1

(+1 을 하는 이유 : 파일의 좌상단의 꼭지점이 파일의 시작점이므로 파일을 전부 포함하려면 끝나는 지점인 파일의 우하단)

 

그렇기때문에 파일이 있는 곳들의 좌표를 구해서 그 중 x,y의 최솟값 조합, 최댓값 조합을 구하면 되겠다고 생각하고

이를 기반으로 코드를 짰다!

 

JAVA

public static int[] solution(String[] wallpaper) {
        int maxX = Integer.MIN_VALUE;
        int minX = Integer.MAX_VALUE;
        int maxY = Integer.MIN_VALUE;
        int minY = Integer.MAX_VALUE;

        char[][] newWallPaper = new char[wallpaper.length][];

        for (int i = 0; i < wallpaper.length; i++) {
            newWallPaper[i] = wallpaper[i].toCharArray(); // 각 행의 문자열을 문자 배열로 변환하여 저장
        }

        for(int y = 0 ; y < wallpaper.length ; y ++){
            for(int x = 0 ; x < newWallPaper[y].length ; x++){
                if (newWallPaper[y][x] == '#'){ // ※ if(wallpaper[i].charAt(j)=='#'){

                    maxX = Math.max(maxX, x);
                    minX = Math.min(minX, x);
                    maxY = Math.max(maxY, y);
                    minY = Math.min(minY, y);
                }
            }
        }
        return new int[]{minY,minX,maxY+1,maxX+1};
    }

※ 15번째 줄을 저렇게만 바꾸면 7~11번째 줄 과정이 필요없어진다 ㅎㅎ..

 

2~5번째 줄

Integer.MIN_VALUE → 정수 변수의 초기값으로 사용되는 상수이자 가장 작은 정수 값인 -2,147,483,648을 나타냄

Integer.MAX_VALUE → 정수 변수의 초기값으로 사용되는 상수이자 가장 큰 정수 값인 2,147,483,647을 나타냄

 

Python

def solution(wallpaper):
    answer = []
    x_array, y_array = [],[]
    for y in range(len(wallpaper)):
        for x in range(len(wallpaper[y])):
            if wallpaper[y][x] == "#":
                x_array.append(x)
                y_array.append(y)
	return [min(y_array), min(x_array), max(y_array)+1, max(x_array)+1]

 

파이썬을 항상 먼저 풀고 그것처럼 java를 풀어서 그런지 비슷하게 하려다보니

필요없는 코드도 넣을 때도 있고 필요한 부분이 생각이 안 날때가 많은 것 같다

댓글