![[til] 알고리즘 프로그래머스 (바탕화면정리)](https://cdn.hashnode.com/res/hashnode/image/upload/v1743599866587/78dae53c-9e04-4d70-95af-ff66c1e654a3.png)
🧑💻 오늘의 문제: 바탕화면 정리
- 출처: 프로그래머스 Lv.1
📌 문제 요약
바탕화면에서 파일(#)이 있는 최소 직사각형 영역을 찾는 문제이다.
배열에서 가장 왼쪽 위 파일의 좌표와, 가장 오른쪽 아래 파일의 좌표를 찾아내야 한다.
🖥️ 내가 작성한 코드
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
🔎 내 코드의 특징 및 복기
초기 좌표값을 큰 수와 작은 수로 설정해 놓고, 파일(#)의 위치를 찾아가며 최소 및 최대 좌표를 갱신하는 방식이다.
좌표를 따로따로 계산하는 방식으로 정확히 의도한 대로 동작하지만, 조금 더 효율적으로 작성할 수 있을 것 같았다.
📌 추가적으로 찾아본 좋은 풀이 방법
다른 사람의 풀이를 살펴보다가 배열을 활용해 간단하게 해결한 코드를 발견했다.
🖥️ 참고한 코드
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()를 이용하여 계산하면 가독성이 크게 증가한다.
코드가 직관적이며, 유지 보수하기도 훨씬 좋다는 생각이 들었다.
내 풀이에서는 각 변수를 독립적으로 관리했지만, 이 풀이는 배열을 이용해 깔끔하게 처리했다.
✨ 느낀점 & 앞으로의 개선방향
변수의 초기값을 임의로 크게 잡는 것보단, 빈 배열과 min, max 함수를 적극적으로 활용하면 코드가 간결해진다는 점을 배웠다.
앞으로 비슷한 문제를 접할 때는 최대한 가독성 좋은 코드, 유지보수성이 뛰어난 코드 작성을 위해서 이런 방법을 떠올리도록 노력해야겠다.
![[til] 프로그래머스 신규아이디 추천](https://cdn.hashnode.com/res/hashnode/image/upload/v1745249371004/97aa7a0b-1b1b-4f81-a5ef-790b9b682f08.png)
![[til] 알고리즘 백준 리그 오브 레전설](https://cdn.hashnode.com/res/hashnode/image/upload/v1745007840153/c6cf7c45-0d8f-4bee-ae9a-55cc454f3c92.png)
![[til] 알고리즘 백준 진우의 달 여행 (Small)](https://cdn.hashnode.com/res/hashnode/image/upload/v1744914681507/e80e8747-d4ff-4fd4-b595-33024a238ee1.png)
![[til] 알고리즘 JadenCase 문자열 만들기](https://cdn.hashnode.com/res/hashnode/image/upload/v1744823424388/57f5c5c1-7e85-4071-88e8-1ec09ed64828.png)
![[til] 알고리즘 백준 포도주 시식](https://cdn.hashnode.com/res/hashnode/image/upload/v1744724798661/286b75a2-50e0-481e-8e3f-2a6cb500d678.png)