[til] 알고리즘 프로그래머스 (바탕화면정리)

2 min read

🧑💻 오늘의 문제: 바탕화면 정리
- 출처: 프로그래머스 Lv.1
📌 문제 요약
바탕화면에서 파일(#)이 있는 최소 직사각형 영역을 찾는 문제이다.
배열에서 가장 왼쪽 위 파일의 좌표와, 가장 오른쪽 아래 파일의 좌표를 찾아내야 한다.
🖥️ 내가 작성한 코드
python복사편집def solution(wallpaper):
answer = []
lux = 99
luy = 99
rdx = 0
rdy = 0
for line_idx in range(len(wallpaper)):
line_arr = list(wallpaper[line_idx])
for paper_idx in range(len(line_arr)):
if (line_arr[paper_idx] == "#" and lux == 99):
lux = line_idx
if (line_arr[paper_idx] == "#" and luy > paper_idx):
luy = paper_idx
if (line_arr[paper_idx] == "#"):
rdx = line_idx + 1
if (line_arr[paper_idx] == "#" and rdy < paper_idx):
rdy = paper_idx
answer = [lux, luy, rdx, rdy+1]
return answer
🔎 내 코드의 특징 및 복기
초기 좌표값을 큰 수와 작은 수로 설정해 놓고, 파일(#)의 위치를 찾아가며 최소 및 최대 좌표를 갱신하는 방식이다.
좌표를 따로따로 계산하는 방식으로 정확히 의도한 대로 동작하지만, 조금 더 효율적으로 작성할 수 있을 것 같았다.
📌 추가적으로 찾아본 좋은 풀이 방법
다른 사람의 풀이를 살펴보다가 배열을 활용해 간단하게 해결한 코드를 발견했다.
🖥️ 참고한 코드
python복사편집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()를 이용하여 계산하면 가독성이 크게 증가한다.
코드가 직관적이며, 유지 보수하기도 훨씬 좋다는 생각이 들었다.
내 풀이에서는 각 변수를 독립적으로 관리했지만, 이 풀이는 배열을 이용해 깔끔하게 처리했다.
✨ 느낀점 & 앞으로의 개선방향
0
Subscribe to my newsletter
Read articles from 유승완 directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
