[프로그래머스] [파이썬] 바탕화면 정리
[14일차] [코딩테스트] [LV.1]
https://school.programmers.co.kr/learn/courses/30/lessons/161990
문제 설명
귀찮… 어렵…
제한사항
- 1 ≤ wallpaper의 길이 ≤ 50
- 1 ≤ wallpaper[i]의 길이 ≤ 50
- wallpaper의 모든 원소의 길이는 동일합니다.
- wallpaper[i][j]는 바탕화면에서 i + 1행 j + 1열에 해당하는 칸의 상태를 나타냅니다.
- wallpaper[i][j]는 “#” 또는 “.”의 값만 가집니다.
- 바탕화면에는 적어도 하나의 파일이 있습니다.
- 드래그 시작점 (lux, luy)와 끝점 (rdx, rdy)는 lux < rdx, luy < rdy를 만족해야 합니다.
입출력 예
wallpaper | result |
---|---|
[”.#…”, “..#..”, “…#.”] | [0, 1, 3, 4] |
[“……….”, “…..#….”, “……##..”, “…##…..”, “….#…..”] | [1, 3, 5, 8] |
[”.##…##.”, “#..#.#..#”, “#…#…#”, “.#…..#.”, “..#…#..”, “…#.#…”, “….#….”] | [0, 0, 7, 9] |
[”..”, “#.”] | [1, 0, 2, 1] |
입출력 예 설명
입출력 예 #1
문제 설명의 예시와 같은 예제입니다. (0, 1)에서 (3, 4)로 드래그 하면 모든 파일을 선택할 수 있고 드래그 한 거리는 6이었고, 6보다 적은 거리로 모든 파일을 선택하는 방법은 없습니다. 따라서 [0, 1, 3, 4]를 return합니다.
입출력 예 #2
(1, 3)에서 (5, 8)로 드래그하면 모든 파일을 선택할 수 있고 이보다 적은 이동거리로 모든 파일을 선택하는 방법은 없습니다. 따라서 가장 적은 이동의 드래그로 모든 파일을 선택하는 방법인 [1, 3, 5, 8]을 return합니다.
입출력 예 #3
모든 파일을 선택하기 위해선 바탕화면의 가장 왼쪽 위 (0, 0)에서 가장 오른쪽 아래 (7, 9)로 드래그 해야만 합니다. 따라서 [0, 0, 7, 9]를 return합니다.
🚀 정답 ⭕
내 풀이
def solution(wallpaper):
# 가장 왼쪽 점이 가장 오른쪽 점보다 위냐 아래냐가 중요할 듯
# 가장 왼쪽 위
leftest = 51 # 문제 조건에 명시되어있음
upest = 51
# 가장 오른쪽 아래
rightest = -1
downest = -1
for x in range(len(wallpaper)):
for y in range(len(wallpaper[x])):
if wallpaper[x][y] == '#':
if x < leftest:
leftest = x
if y < upest:
upest = y
if x > rightest:
rightest = x
if y > downest:
downest = y
# answer = abs(leftest-(rightest+1))+abs(upest-(downest+1))
return [leftest,upest,rightest+1,downest+1]
다른 사람 풀이
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]
끙… 왜 다른 사람 풀이 처럼 충분히 할 수 있는데 왜 저렇게 생각이 나지 않았을까….
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄