알고리즘
[구현] 프로그래머스 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차원 배열을 만들 생각만 했다.
사실 우리가 필요한 건 인덱스이기 때문에, 인덱스 값만 저장하는 이 방법이 더 편해보인다.