본문 바로가기
Problem Solving/프로그래머스

[프로그래머스|파이썬] 바탕화면 정리 (연습문제/lv.1)

by 청량리 물냉면 2023. 5. 23.
반응형
문제

https://school.programmers.co.kr/learn/courses/30/lessons/161990

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

🐍파이썬
def solution(wallpaper):
    lux, luy, rdx, rdy = 50, 50, 0, 0
    for x in range(len(wallpaper)):
        for y in range(len(wallpaper[x])):
            if wallpaper[x][y] == "#":
                lux = min(lux, x)	#매번 가장 작은 시작x점 갱신
                luy = min(luy, y)	#매번 가장 작은 시작y점 갱신
                rdx = max(rdx, x+1)	#드래그 하려면 (x+1, y+1)까지 가야 하므로 x+1갱신
                rdy = max(rdy, y+1)	#가장 큰 y+1 갱신
    return [lux, luy, rdx, rdy]

 

#..

.#.

..#

파일이 이렇게 배열되어 있다면 단순히 가장 상단에 있는 파일의 좌표와 가장 하단에 있는 파일의 좌표를 출력하면 되지만, 

..#..

.#...

....#

...#.

위 같은 파일배열의 경우, 가장 상단의 파일과 가장 하단의 파일의 좌표만 확인하면 범위 안에 들어오지 않는 파일이 있을 수 있다. 따라서 모든 좌표의 파일을 범위 안에 넣기 위해서 모든 파일의 좌표 중 가장 작은 x, y값을 시작 좌표로 삼고 end 좌표 역시 모든 파일의 좌표 중 가장 큰 x, y값을 사용해야 한다.

이중for문을 통해 파일의 위치를 찾고 매번 start 좌표값과 end 좌표값을 업데이트해주는 방법으로 답을 구했다.

 

 

다른 풀이 방법

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]
반응형