[프로그래머스] 같은 숫자는 싫어 Lv.1 python

gong_ryong·2023년 3월 13일
0

프로그래머스

목록 보기
1/15

문제 링크

1. 문제 설명

컴퓨터 바탕화면은 각 칸이 정사각형인 격자판입니다. 이때 컴퓨터 바탕화면의 상태를 나타낸 문자열 배열 wallpaper가 주어집니다.
예를 들어 wallpaper = [".#...", "..#..", "...#."]인 바탕화면을 그림으로 나타내면 다음과 같습니다.
이러한 바탕화면에서 다음 그림과 같이 S(0, 1)에서 E(3, 4)로 드래그하면 세 개의 파일이 모두 선택되므로 드래그 한 거리 (3 - 0) + (4 - 1) = 6을 최솟값으로 모든 파일을 선택 가능합니다.

2. 접근 방식

모든 파일의 x좌표, y좌표중 최소값과 최대값을 구할 수 있다면 모든 파일을 포함하는 가장 좁은 직사각형 영역을 구할 수 있습니다.

3. 내 풀이

def solution(wallpaper):
    lux=luy=51 #최소값 좌표
    rdx=rdy=0 #최대값 좌표
    for i in range(len(wallpaper)):
        for j in range(len(wallpaper[0])):
            if wallpaper[i][j]=="#": 	-
                lux=min(lux,i)
                rdx=max(rdx,i)
                luy=min(luy,j)
                rdy=max(rdy,j)
#모든 폴더의 좌표와 최소, 최대값을 비교
    return [lux,luy,rdx+1,rdy+1]

모든 폴더의 좌표를 찾을 때마다 최소값과 최대값을 갱신하도록 했습니다. 그런데 사실 이렇게 할 필요는 없죠.. ㅎㅎ

4. 다른 사람의 풀이

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]

모든 폴더의 좌표를 list에 갱신해서 최소, 최대값을 찾으면 됩니다. 코드도 짧고 처리시간도 짧고 직관적입니다.

profile
비전공자의 비전공자를 위한 velog

0개의 댓글