바탕화면 정리
풀이
파일이 인덱스와 인덱스 사이에 있으므로 이 부분에 대해서만 확인 하면 문제가 생기진 않을 듯하다.
좌상에서 우하로 드래그를 하도록 한다 가정하자.
파일또한 각 정확한 인덱스에 있다고하면, 우하의 위치만 각 +1, +1 해주면 문제가 없다.
이를 바탕으로 가장 위, 가장 왼쪽, 가장 아래, 가장 오른쪽 의 위치만 찾아주고, 아래와 오른쪽에만 각 +1해주면 해결된다.
난 아래처럼 풀었다.
# '#'의 의 실제 인덱스는 i~i+1 까지 안에 있음 드래그를 통하기 때문, 이를 조정필요.
# 모든 파일을 드래그 할 수 있는 한 번의 값
# 맨 왼쪽과 위는 실제 인덱스를 맨 오른쪽과 아래는 실제 인덱스+1을해주자.
# 처음에 [맨 위, 맨 왼, 맨 아래, 맨 오른]을 하고 return시에는 맨 아래 + 1, 맨 오른 + 1
def solution(wallpaper):
N = len(wallpaper) # 행 갯수
M = len(wallpaper[0]) # 열 갯수
answer = []
# 제일 위의 인덱스 찾기
for row in range(N):
isbreak = False
for col in range(M):
if wallpaper[row][col] == '#':
answer.append(row)
isbreak = True
break
if isbreak:
break
# 제일 왼쪽 인덱스 찾기
for col in range(M):
isbreak = False
for row in range(N):
if wallpaper[row][col] == '#':
answer.append(col)
isbreak = True
break
if isbreak:
break
# 제일 아래 인덱스 찾기
for row in range(N-1,-1,-1):
isbreak = False
for col in range(M):
if wallpaper[row][col] == '#':
answer.append(row + 1)
isbreak = True
break
if isbreak:
break
# 제일 오른쪽 인덱스 찾기
for col in range(M-1,-1,-1):
isbreak = False
for row in range(N):
if wallpaper[row][col] == '#':
answer.append(col + 1)
isbreak = True
break
if isbreak:
break
return answer
다른 사람 풀이
나와 생각은 같았으나, 더 간결하고 짧다.
min()과 max()를 이용했다. 이런 머리를 기를 수 있도록 해야지.
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]
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 Lv1 달리기 경주 (python) (0) | 2024.02.02 |
---|---|
프로그래머스 Lv1 명예의 전당 (1) (python) (0) | 2024.02.02 |
프로그래머스 Lv1 조건에 맞는 회원수 구하기 (MySQL) (1) | 2024.02.02 |
프로그래머스 Lv1 상위 n개 레코드 (MySQL) (0) | 2024.02.02 |
프로그래머스 Lv1 여러 기준으로 정렬하기 (MySQL) (0) | 2024.02.02 |