티스토리 뷰
https://school.programmers.co.kr/learn/courses/30/lessons/161990
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 접근 방식
- lux, luy, rdx, rdy는 각각 가장 위쪽, 가장 왼쪽, 가장 아래쪽, 가장 오른쪽에 있는 좌표이다.
바탕화면 wallpaper 리스트를 행별로 순회하면서 lux, luy, rdx, rdy를 초기화하면 된다. 좀 더 자세히 말하면 다음과 같다.
- lux는 #가 존재하는 첫 번째 행이다.
따라서 처음 lux는 -1로 초기화하고, #가 존재하는 첫 행을 만나면 해당 행으로 lux를 초기화한다. 이때 lux == -1이라는 조건문을 사용하는데, 첫 행으로 초기화되고나면 -1이 아니므로 해당 조건문을 계속 건너뛰어 최초의 lux를 유지할 수 있다.
- luy는 각 행에서 가장 왼쪽에 존재하는 #의 열이다.
따라서 기존에 저장된 luy와 현재 행에서 가장 처음에 존재하는 #의 열을 비교하여 더 작은 값이 luy에 저장되도록 해야 한다.
- rdx는 (#이 존재하는 가장 아래쪽 행 + 1)이다.
위 그림에서 가장 아래쪽에 있는 파일은 2행 3열에 존재하지만, 해당 파일까지 포함하려면 3행 4열까지 드래그해야 한다. 따라서 마지막 행에 +1을 해주어야 하며, 이는 rdy도 마찬가지이다.
- rdy는 각 행에서 가장 오른쪽에 존재하는 #의 열이다.
따라서 기존에 저장된 rdy와 현재 행에서 가장 끝에 존재하는 #의 열을 비교하여 더 큰 값이 rdy에 저장되도록 해야 한다.
2. 정답 코드
def solution(wallpaper):
lux, luy, rdx, rdy = -1, 51, -1, -1
length = len(wallpaper[0])
for i, wp in enumerate(wallpaper):
if wp.find('#') == -1:
continue
if lux == -1:
lux = i
rdx = i + 1
left = wp.index('#')
luy = left if left < luy else luy
right = length - wp[::-1].index('#')
rdy = right if rdy < right else rdy
return [lux, luy, rdx, rdy]
728x90
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] [1차] 셔틀버스 파이썬 정답 코드 (0) | 2023.06.23 |
---|---|
[프로그래머스] k진수에서 소수 개수 구하기 파이썬 정답 코드 (0) | 2023.06.20 |
[프로그래머스] [3차] 방금그곡 파이썬 정답 코드 (0) | 2023.06.18 |
[프로그래머스] 두 큐 합 같게 만들기 파이썬 정답 코드 (0) | 2023.06.17 |
[프로그래머스] 개인정보 수집 유효기간 파이썬 정답 코드 (0) | 2023.06.17 |