본문 바로가기
알고리즘 배우기

[프로그래머스] Lv 1. 바탕화면 정리

by cwin 2024. 6. 25.
# 해당 함수는 사용하지는 않음
def distance(S, E):
    dist = (E[0] - S[0]) + (E[1] - S[1])
    return dist

# Bounding Box 처리와 같은 원리로 생각 sorting을 2번 진행하여 2Xnlogn 복잡도 에상
def wall_calc(wall_list, rows, cols):
    wall_list.sort(key=lambda x: x[0]) #O(nlogn)
    lux = wall_list[0][0]
    rdx = wall_list[-1][0] + 1
    #최소 y, 최대 x (좌측 상단)
    wall_list.sort(key=lambda x: x[1]) #O(nlogn)
    luy = wall_list[0][1]
    rdy = wall_list[-1][1] + 1
    #최대 y, 최소 x (우측 하단)
    return [lux, luy, rdx, rdy]

# 아이콘이 존재하는 좌표만 뽑아내기
def make_wall(wallpaper):
    rows = len(wallpaper)
    cols = len(wallpaper[0])
    wall_list = []
    for row in range(rows):
        for col in range(cols):
            if wallpaper[row][col] == '#':
                wall_list.append([row, col])
    return wall_list, rows, cols
    
def solution(wallpaper):
    wall_list, rows, cols = make_wall(wallpaper)
    answer = wall_calc(wall_list, rows, cols)
    return answer