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

kiki·2024년 1월 24일
0

프로그래머스

목록 보기
70/78

문제 링크

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

문제 설명

  • 머쓱이의 컴퓨터 바탕화면의 상태를 나타내는 문자열 배열 wallpaper가 매개변수로 주어질 때 바탕화면의 파일들을 한 번에 삭제하기 위해 최소한의 이동거리를 갖는 드래그의 시작점과 끝점을 담은 정수 배열을 return
  • 드래그의 시작점이 (lux, luy), 끝점이 (rdx, rdy)라면 정수 배열 [lux, luy, rdx, rdy]를 return

1차 시도

def solution(wallpaper):
    left, up = len(wallpaper[0]), len(wallpaper)
    right, down = 0,0
    for i,r in enumerate(wallpaper):
        for j,c in enumerate(r):
            if c=='#':
                up = min(up, i)
                down = max(down, i)
                left = min(left, j)
                right = max(right, j)
    return ([up, left, down+1, right+1])

파일이 있는 위치마다 인덱스를 확인해서 가장 위,왼쪽을 min으로 구하고 아래,오른쪽을 max로 구하는 식으로 코드를 작성했다.

근데..! 여기서 중요한 건 세로 방향을 y, 가로방향을 x라고 한다면,
y의 최솟값이 가장 위, 최댓값이 가장 아래이고
x의 최솟값이 가장 왼쪽, 최댓값이 가장 오른쪽이라는 점이다.
그래서 다시 코드를 작성하면

2차 시도

def solution(wallpaper):
    row = []
    column = []
    for i,r in enumerate(wallpaper):
        for j,c in enumerate(r):
            if c=='#':
                row.append(i)
                column.append(j)
    return [min(row), min(column), max(row)+1, max(column)+1]

for문 돌면서 파일의 인덱스만 저장해두고 마지막에 min, max로 요구하는 값들을 리턴해주면 된다.

정리

  • 알고 있는데, 알고있는 걸 조금 더 복잡하게 푸는 경향이 있다! 좀 단순하게 보려고하자.

0개의 댓글