[프로그래머스] 바탕화면 정리 Lv.1 - [파이썬/python]
https://school.programmers.co.kr/learn/courses/30/lessons/161990
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
더보기
복잡하게 생각하실거 없습니다.
for문 사용하여 바탕화면(wallpaper)을 순회하면서 파일("#")을 발견하면
파일("#")의 인덱스를 저장하고
파일("#")의 인덱스인 y, x의 둘 각각 가장 작은 값과 가장 큰 값을 구하면 됩니다.
- 파일 위치 식별
주어진 바탕화면(wallpaper)에서 파일이 위치한 곳을 식별하는 것이 중요합니다.
이를 위해 이중 반복문을 사용하여 "#" 문자의 위치를 찾아내야 합니다. - 파일의 인덱스 y, x의 최솟값과 최댓값 각각 찾기
윗 단계에서 바탕화면(wallpaper)을 순회하다보면 파일("#")을 찾으실 수 있습니다.
파일("#")의 찾았을 때의 위치(인덱스)를 저장하여 y, x의 각각 최솟값과 최댓값을 찾아보십시오. - 결과 반환
y, x의 각각 최솟값과 최댓값을 사용하여 문제의 결과를 반환하기
[min(y), min(x), max(y)+1, max(x)+1]
저는 일단 두 가지 방법으로 풀었는데 두 방법 다 원리는 똑같습니다.
메모리와 시간복잡도를 계산해보니 1번 방법이 조금 더 빨랐습니다.
2번 방법은 코드 보기가 편합니다.
두 코드 다 올려놓겠습니다.
정답 주의!!!
# 1번 방법 / 2번 보다 메모리 사용과 성능이 좋습니다
def solution(wallpaper):
min_y, min_x = len(wallpaper), len(wallpaper[0])
max_y, max_x = -1, -1
#최솟값과 최댓값을 구해야하므로 그에 반하는 값 입력
for y_idx, x in enumerate(wallpaper):
#한줄씩 확인하기
if "#" in x:
#줄에 "#"이 있을 때 확인하기
if (y_idx < min_y): #맨 위쪽 좌표 구하기(y의 최솟값)
min_y = y_idx
if (y_idx+1 > max_y): #맨 아래쪽 좌표 구하기(y의 최댓값)
max_y = y_idx+1
if (x.find("#") < min_x): #맨 왼쪽 좌표 구하기(x의 최솟값)
min_x = x.find("#")
if (x.rfind("#")+1 > max_x): #맨 오른쪽 좌표 구하기(x의 최댓값)
max_x = x.rfind("#")+1
return [min_y,min_x,max_y,max_x]
# 2번 방법
def solution(wallpaper):
file_y = [] # 파일("#")의 세로 위치를 담을 배열
file_x = [] # 파일("#")의 가로 위치를 담을 배열
# 주어진 바탕화면(wallpaper)을 한 줄씩 순회
for y_idx, row in enumerate(wallpaper):
for x_idx, i in enumerate(row):
# 파일("#")을 찾으면,
if i == "#":
file_y.append(y_idx) # 해당 파일의 세로 위치를 file_y 배열에 추가
file_x.append(x_idx) # 해당 파일의 가로 위치를 file_x 배열에 추가
# min(file_y) = 파일이 존재하는 가장 위쪽 행의 인덱스 중 가장 작은 값을 찾아서 최소 세로 위치로 설정
# min(file_x) = 파일이 존재하는 가장 왼쪽 열의 인덱스 중 가장 작은 값을 찾아서 최소 가로 위치로 설정
# max(file_y) + 1 = 파일이 존재하는 가장 아래쪽 행의 인덱스 중 가장 큰 값을 찾아서 최대 세로 위치로 설정
# max(file_x) + 1 = 파일이 존재하는 가장 오른쪽 열의 인덱스 중 가장 큰 값을 찾아서 최대 가로 위치로 설정
return [min(file_y), min(file_x), max(file_y)+1, max(file_x)+1]
728x90
'코딩테스트' 카테고리의 다른 글
[프로그래머스] 문자열 다루기 기본 - Lv.1 (37) | 2023.08.10 |
---|---|
[프로그래머스] 수박수박수박수박수박수? - Lv.1 (27) | 2023.08.10 |
[프로그래머스] 신고 결과 받기 - Lv.1 (37) | 2023.08.08 |
[프로그래머스] 공원 산책 - Lv.1 (16) | 2023.08.07 |
[프로그래머스] 달리기 경주 - Lv.1 (0) | 2023.08.06 |