컴퓨터 바탕화면은 각 칸이 정사각형인 격자판입니다. 이때 컴퓨터 바탕화면의 상태를 나타낸 문자열 배열 wallpaper가 주어집니다.
예를 들어 wallpaper = [".#...", "..#..", "...#."]인 바탕화면을 그림으로 나타내면 다음과 같습니다.
이러한 바탕화면에서 다음 그림과 같이 S(0, 1)에서 E(3, 4)로 드래그하면 세 개의 파일이 모두 선택되므로 드래그 한 거리 (3 - 0) + (4 - 1) = 6을 최솟값으로 모든 파일을 선택 가능합니다.
모든 파일의 x좌표, y좌표중 최소값과 최대값을 구할 수 있다면 모든 파일을 포함하는 가장 좁은 직사각형 영역을 구할 수 있습니다.
def solution(wallpaper):
lux=luy=51 #최소값 좌표
rdx=rdy=0 #최대값 좌표
for i in range(len(wallpaper)):
for j in range(len(wallpaper[0])):
if wallpaper[i][j]=="#": -
lux=min(lux,i)
rdx=max(rdx,i)
luy=min(luy,j)
rdy=max(rdy,j)
#모든 폴더의 좌표와 최소, 최대값을 비교
return [lux,luy,rdx+1,rdy+1]
모든 폴더의 좌표를 찾을 때마다 최소값과 최대값을 갱신하도록 했습니다. 그런데 사실 이렇게 할 필요는 없죠.. ㅎㅎ
def solution(wall):
a, b = [], []
for i in range(len(wall)):
for j in range(len(wall[i])):
if wall[i][j] == "#":
a.append(i)
b.append(j)
return [min(a), min(b), max(a) + 1, max(b) + 1]
모든 폴더의 좌표를 list에 갱신해서 최소, 최대값을 찾으면 됩니다. 코드도 짧고 처리시간도 짧고 직관적입니다.