[파이썬 코딩테스트] 4.바탕화면 정리 - 프로그래머스

링크

내 풀이(O)

  • 상하좌우 가장 끝에 있는 파일의 좌표를 구한다
  • 정답: [가장 상단 파일의 i, 가장 좌측 파일의 j, 가장 하단 파일의 i + 1, 가장 우측 파일의 j + 1]
def solution(wallpaper):

    in_y = [i for i, row in enumerate(wallpaper) if '#' in row]
    i1 = in_y[0]
    i2 = in_y[-1] + 1

    two_dim_arr = [list(wall) for wall in wallpaper]
    in_z = [j for i, row in enumerate(two_dim_arr) for j, cell in enumerate(row) if '#' in cell]
    j1 = min(in_z)
    j2 = max(in_z) + 1

    return [i1, j1, i2, j2]

다른 풀이

  • '#'이 있는 좌표의 i와 j를 한 번에 배열에 담아서 뽑아냄
def solution(wallpaper):
    a, b = [], []
    for i in range(len(wallpaper)):
        for j in range(len(wallpaper[i])):
            if wallpaper[i][j] == "#":
                a.append(i)
                b.append(j)
    return [min(a), min(b), max(a) + 1, max(b) + 1]

검증용 코드

wallpapers = [
    [".#...", "..#..", "...#."],
    ["..........", ".....#....", "......##..", "...##.....", "....#....."],
    [".##...##.", "#..#.#..#", "#...#...#", ".#.....#.", "..#...#..", "...#.#...", "....#...."],
    ["..", "#."],
]
results = [
    [0, 1, 3, 4],
    [1, 3, 5, 8],
    [0, 0, 7, 9],
    [1, 0, 2, 1],
]

for idx in range(len(results)):
    print(idx, '성공' if solution(wallpapers[idx]) == results[idx] else "실패")

links

social