[Programmers][Py] 바탕화면 정리

mj·2024년 7월 14일
0

코딩테스트문제

목록 보기
36/50

✅ 문제

문제 바로가기



✅ 나의 코드


def solution(wallpaper):
    
    h = len(wallpaper)
    w = len(wallpaper[0])
    
    sx = h-1
    sy = w-1
    ex = 0
    ey = 0
    
    for x in range(h):
        for y in range(w):
            if wallpaper[x][y] == "#":
                if sx > x: sx = x
                if ex < x: ex = x
                if sy > y: sy = y
                if ey < y: ey = y
    
    return [sx, sy, ex+1, ey+1]

구현 과정

  • 시작점: S(sx, sy)
  • 끝점: E(ex, ey)
  • 리턴값 : [sx, sy, ex, ey]

  • sx : 가장 위쪽에 있는 파일의 행 (행의 가장 작은 값)
  • sy : 가장 왼쪽에 있는 파일의 열 (열의 가장 작은 값)
  • ex : 가장 아래쪽에 있는 파일의 행 (행의 가장 큰 값)
  • ey : 가장 오른쪽에 있는 파일의 열 (열의 가장 큰 값)

sx, sy, ex, ey의 초기값을 설정하고, 현재좌표가 이보다 더 크거나 작은 값이라면 값을 현재좌표로 바꾼다.

실수했던 부분


위의 예시에서 가장 끝점에 있는 파일의 좌표는 (2, 3)이지만, 끝점의 파일까지 포함하려면 1을 더한 E(3,4)까지 드래그해야한다.



✅ 다른사람의 코드


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]

파일의 좌표를 행 좌표와 열 좌표로 나누어 배열에 담고, min(), max()를 사용하여 간단하게 구현함.


Comment

  • 나의 코드와 비교했을때, 풀어내는 로직은 같지만 파이썬의 함수를 사용하면 가독성이 좋고 간단하게 작성했다.
  • 파이썬 함수를 활용해보자.
profile
일단 할 수 있는걸 하자.

0개의 댓글