Skip to content

Commit

Permalink
프로그래머스 바탕화면 정리
Browse files Browse the repository at this point in the history
가로 드래그 범위 luy, rdy 는 모든 행의 '#' 문자 기준으로 병합해서 '#' 문자의 시작과 끝 인덱스를 구하면 된다.
문제 설명을 보면 끝 색인값에 오프셋으로 1이 추가됨
병합 로직에 대해서는 reducer 함수 참고

세로 드래그 범위 lux, rdx 는 '#' 문자가 있는 wallpaper 아이템의 첫 인덱스와 마지막 인덱스를 찾아내면 된다.
  • Loading branch information
mu-hun committed Dec 2, 2023
1 parent 051a269 commit 5536244
Showing 1 changed file with 31 additions and 0 deletions.
31 changes: 31 additions & 0 deletions programmers.com/learn/courses/30/lessons/161990.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
from functools import reduce

def reducer(a: str, b: str):
length = len(a)
reduced = []
for index in range(length):
if a[index] == '#' or b[index] == '#':
reduced.append('#')
else:
reduced.append('.')

return ''.join(reduced)

def solution(wallpaper: list[str]):
flatten = reduce(reducer, wallpaper)
luy, rdy = flatten.find('#'), flatten.rfind('#') + 1

mappedRow = list(map(lambda row: '#' in row, wallpaper))

lux, rdx = mappedRow.index(True), len(mappedRow) - mappedRow[::-1].index(True)

return [lux, luy, rdx, rdy]

def test_reducer():
assert reducer('.....#....', '......##..') == '.....###..'

def test_solution():
assert solution([".#...", "..#..", "...#."]) == [0, 1, 3, 4]
assert solution(["..........", ".....#....", "......##..", "...##.....", "....#....."]) == [1, 3, 5, 8]
assert solution([".##...##.", "#..#.#..#", "#...#...#", ".#.....#.", "..#...#..", "...#.#...", "....#...."]) == [0, 0, 7, 9]
assert solution(["..", "#."]) == [1, 0, 2, 1]

0 comments on commit 5536244

Please sign in to comment.