우당탕탕 개발일지

[구현] 프로그래머스 level 1 바탕화면 정리 (Python 파이썬) 본문

알고리즘

[구현] 프로그래머스 level 1 바탕화면 정리 (Python 파이썬)

민아당긴아 2025. 3. 28. 00:20

💡문제 링크

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

💡문제 분석 요약

간단하게 x좌표의 최솟값&최댓값, y좌표의 최솟값&최댓값 구하는 문제

 

💡알고리즘 설계

for문을 이용해 하나하나 탐색하면서 x좌표의 최솟값&최댓값, y좌표의 최솟값&최댓값을 찾는다.

 

💡코드

def solution(wallpaper):
    grid = []
    # grid 표시
    for w in wallpaper:
        grid.append([1 if a == "#" else 0 for a in w ])
    # S, E 찾기
    xl = len(grid)
    yl = len(grid[0])
    x_min, x_max, y_min, y_max = 0, 0, 0, 0
    for i in range(xl):
        if sum(grid[i]) > 0:
            x_min = i
            break
    for i in range(xl-1, 0, -1):
        if sum(grid[i]) > 0:
            x_max = i
            break
    for i in range(yl):
        if sum(g[i] for g in grid) > 0:
            print(i)
            y_min = i
            break
    for i in range(yl-1, 0, -1):
        if sum(g[i] for g in grid) > 0:
            print(i)
            y_max = i
            break
    return x_min, y_min, x_max+1, y_max+1

 

💡 오답 풀이

아래 코드를 안 넣어주니 문제가 발생했다. #가 한 번도 없을 때의 케이스를 해결하지 못했다. 그래서 일단 y_max와 같은 변수들을 초기화하여 코드 실행 중에 항상 정의되도록 하였다.

x_min, x_max, y_min, y_max = 0, 0, 0, 0

 

💡 다른 풀이

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

너무 당연하게 파일의 위치를 1로 나타내고, 나머지는 0으로 표시하는 2차원 배열을 만들 생각만 했다.

사실 우리가 필요한 건 인덱스이기 때문에, 인덱스 값만 저장하는 이 방법이 더 편해보인다.