한 번의 움직임으로 바탕화면에 있는 모든 파일 드레그하기
문제 설명
코딩테스트를 준비하는 머쓱이는 프로그래머스에서 문제를 풀고 나중에 다시 코드를 보면서 공부하려고 작성한 코드를 컴퓨터 바탕화면에 아무 위치에나 저장해 둡니다. 저장한 코드가 많아지면서 머쓱이는 본인의 컴퓨터 바탕화면이 너무 지저분하다고 생각했습니다. 프로그래머스에서 작성했던 코드는 그 문제에 가서 다시 볼 수 있기 때문에 저장해 둔 파일들을 전부 삭제하기로 했습니다.
컴퓨터 바탕화면은 각 칸이 정사각형인 격자판입니다. 이때 컴퓨터 바탕화면의 상태를 나타낸 문자열 배열 wallpaper가 주어집니다. 파일들은 바탕화면의 격자칸에 위치하고 바탕화면의 격자점들은 바탕화면의 가장 왼쪽 위를
드래그는 바탕화면의 격자점 S
점 S
점 S에서 점 E로 드래그를 하면 바탕화면에서 두 격자점을 각각 왼쪽 위, 오른쪽 아래로 하는 직사각형 내부에 있는 모든 파일이 선택됩니다.
예를 들어 wallpaper = [".#...", "..#..", "...#."]인 바탕화면을 그림으로 나타내면 다음과 같습니다.

이러한 바탕화면에서 다음 그림과 같이 S

머쓱이의 컴퓨터 바탕화면의 상태를 나타내는 문자열 배열 wallpaper가 매개변수로 주어질 때 바탕화면의 파일들을 한 번에 삭제하기 위해 최소한의 이동거리를 갖는 드래그의 시작점과 끝점을 담은 정수 배열을 return하는 solution 함수를 작성해 주세요. 드래그의 시작점이
제한사항
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를 만족해야 합니다.
https://school.programmers.co.kr/learn/courses/30/lessons/161990
바탕화면을 차례로 훑으면서 파일의 좌표를 저장합니다.
가로, 세로의 각각의 최소값을 드레그 시작점으로, 최대값에 +1 한 점을 끝점으로 선택했습니다.
def solution(wallpaper):
r, c = [], []
for i, rows in enumerate(wallpaper):
for j, col in enumerate(rows):
if col == "#":
r.append(i)
c.append(j)
return [min(r), min(c), max(r)+1, max(c)+1]
입출력 예
wallpaper | result |
[".#...", "..#..", "...#."] | [0, 1, 3, 4] |
["..........", ".....#....", "......##..", "...##.....", "....#....."] | [1, 3, 5, 8] |
[".##...##.", "#..#.#..#", "#...#...#", ".#.....#.", "..#...#..", "...#.#...", "....#...."] | [0, 0, 7, 9] |
["..", "#."] | [1, 0, 2, 1] |
입출력 예 #1
문제 설명의 예시와 같은 예제입니다.
입출력 예 #2
예제 2번의 바탕화면은 다음과 같습니다.

입출력 예 #3
예제 3번의 바탕화면은 다음과 같습니다.

모든 파일을 선택하기 위해선 바탕화면의 가장 왼쪽 위
입출력 예 #4
예제 4번의 바탕화면은 다음과 같이 2행 1열에만 아이콘이 있습니다.

이를 드래그로 선택하기 위해서는 그 칸의 왼쪽 위
'IT > Python' 카테고리의 다른 글
[프로그래머스] Lv.1 햄버거 만들기 [Python] 0 | 2023.08.19 |
---|---|
[프로그래머스] Lv.1 성격 유형 검사하기 [Python] 0 | 2023.08.19 |
[백준] 13414번 수강신청 [Python] 0 | 2023.08.18 |
[백준] 2628번 종이자르기 [Python] 0 | 2023.08.18 |