본문 바로가기
알고리즘/프로그래머스

프로그래머스 Lv1 바탕화면 정리 (python)

by 개발하는 호랑이 2024. 2. 2.

바탕화면 정리

 

 

풀이

파일이 인덱스와 인덱스 사이에 있으므로 이 부분에 대해서만 확인 하면 문제가 생기진 않을 듯하다.
좌상에서 우하로 드래그를 하도록 한다 가정하자.
파일또한 각 정확한 인덱스에 있다고하면, 우하의 위치만 각 +1, +1 해주면 문제가 없다.
이를 바탕으로 가장 위, 가장 왼쪽, 가장 아래, 가장 오른쪽 의 위치만 찾아주고, 아래와 오른쪽에만 각 +1해주면 해결된다.

난 아래처럼 풀었다.

# '#'의 의 실제 인덱스는 i~i+1 까지 안에 있음 드래그를 통하기 때문, 이를 조정필요.
# 모든 파일을 드래그 할 수 있는 한 번의 값
# 맨 왼쪽과 위는 실제 인덱스를 맨 오른쪽과 아래는 실제 인덱스+1을해주자.
# 처음에 [맨 위, 맨 왼, 맨 아래, 맨 오른]을 하고 return시에는 맨 아래 + 1, 맨 오른 + 1

def solution(wallpaper):
    N = len(wallpaper)      # 행 갯수
    M = len(wallpaper[0])   # 열 갯수
    answer = []
    # 제일 위의 인덱스 찾기
    for row in range(N):
        isbreak = False
        for col in range(M):
            if wallpaper[row][col] == '#':
                answer.append(row)
                isbreak = True
                break
        if isbreak:
            break
    # 제일 왼쪽 인덱스 찾기
    for col in range(M):
        isbreak = False
        for row in range(N):
            if wallpaper[row][col] == '#':
                answer.append(col)
                isbreak = True
                break
        if isbreak:
            break
    # 제일 아래 인덱스 찾기
    for row in range(N-1,-1,-1):
        isbreak = False
        for col in range(M):
            if wallpaper[row][col] == '#':
                answer.append(row + 1)
                isbreak = True
                break
        if isbreak:
            break
    # 제일 오른쪽 인덱스 찾기
    for col in range(M-1,-1,-1):
        isbreak = False
        for row in range(N):
            if wallpaper[row][col] == '#':
                answer.append(col + 1)
                isbreak = True
                break
        if isbreak:
            break
    return answer

다른 사람 풀이

나와 생각은 같았으나, 더 간결하고 짧다.
min()과 max()를 이용했다. 이런 머리를 기를 수 있도록 해야지.

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]