[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()를 이용하여 계산하면 가독성이 크게 증가한다.

  • 코드가 직관적이며, 유지 보수하기도 훨씬 좋다는 생각이 들었다.

  • 내 풀이에서는 각 변수를 독립적으로 관리했지만, 이 풀이는 배열을 이용해 깔끔하게 처리했다.


느낀점 & 앞으로의 개선방향

  • 변수의 초기값을 임의로 크게 잡는 것보단, 빈 배열과 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

유승완
유승완