본문 바로가기

카테고리 없음

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

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

 

프로그래머스

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

programmers.co.kr

해설

def solution(wallpaper):
    answer = []
    sx,sy,ex,ey = len(wallpaper),len(wallpaper[0]),0,0
    
    for i in range(len(wallpaper)):
        row = wallpaper[i]
        for j in range(len(row)):
            col = row[j]
            if (col == '#'):
                sx = i if sx >= i else sx
                ex = i if ex <= i else ex
                sy = j if sy >= j else sy
                ey = j if ey <= j else ey
                
    answer.append(sx)
    answer.append(sy)
    answer.append(ex+1)
    answer.append(ey+1)
    return answer

 

(0,0)을 기준으로 첫번째 인자가 세로방향을 의미하고, 두번째 인자가 가로방향을 의미한다. 즉, 가로방향이 y이고 세로 방향이 x이다. (여기서 조금 헷갈렸다..)

 

드래그 시작하는 파일의 좌표를 (sx,sy), 끝나는 파일의 좌표를 (ex,ey)로 설정한다.

wallpaper의 요소의 갯수는 전체 행의 갯수를 의미하고 요소의 길이는 열의 갯수를 의미한다.

 

드래그 했을 때, 모든 파일을 포함하기 위해서는 시작파일의 좌표를 파일들의 좌표 중 가장 작은 x,y 좌표값이어야 하며 끝파일의 좌표는 파일들의 좌표 중 가장 큰 x,y여야 한다.

 

마지막으로, 끝나는 파일의 좌표에 1씩 추가해줘야 마지막 파일까지 포함할 수 있으므로 ex, ey에 +1을 해주었다.

 

코드로 보면 쉬운데, 어떻게 구현해야하는지 시간을 오래 잡아먹은 문제였다.