우당탕탕 개발일지
[구현] 프로그래머스 level 1 바탕화면 정리 (Python 파이썬) 본문
💡문제 링크
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차원 배열을 만들 생각만 했다.
사실 우리가 필요한 건 인덱스이기 때문에, 인덱스 값만 저장하는 이 방법이 더 편해보인다.
'알고리즘' 카테고리의 다른 글
[BFS/DFS] 프로그래머스 level 3 아이템 줍기 (Python 파이썬) (0) | 2025.03.27 |
---|---|
[그리디] 프로그래머스 level 3 단어 변환 (Python 파이썬) (0) | 2025.03.25 |
[DFS/BFS] 프로그래머스 level 2 숫자 변환하기 (Python 파이썬) (0) | 2025.03.23 |
[동적계획법] 프로그래머스 level 2 조이스틱 (Python 파이썬) (0) | 2025.03.18 |
프로그래머스 level 2 이진변환 반복하기 (Python 파이썬) (0) | 2025.03.12 |