https://school.programmers.co.kr/learn/courses/30/lessons/161990
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 접근
솔직히 그림 하나만 그려봐도 바로 풀 수 있는 쉬운 문제.. 하지만 난 30분 걸림^^
생각의 흐름
1. wallpaper은 일차원 배열이므로 이를 문자로 분리해서 graph라는 이차원 배열에 저장
2. 각 #의 위치를 저장할 빈 리스트 할당 후 graph의 인덱스 i, j로 표현하면 location[i][j] => i는 행, j는 열
3. 교차하는 선을 쫙쫙 그어보면, 가장 작은 [i, j] 그리고 가장 큰 [i+1, j+1]이 드래그의 시작점, 끝점이므로 이 또한 반복문을 두번 사용해서 행에서 최소, 최대 찾고 열에서 최소, 최대를 찾자
코드
def solution(wallpaper):
answer = []
graph = []
location = []
for string in wallpaper: # 문자열을 문자로 쪼개서 이차원 배열에 저장
row = []
for char in string:
row.append(char)
graph.append(row)
# graph를 순회하면서 '#'을 찾고 그 위치(인덱스)를 location에 저장하기
for i in range(len(graph)):
for j in range(len(graph[i])):
if graph[i][j] == '#':
location.append([i,j])
print(location) # 찍어보는 용도
min_i, max_i = location[0][0], location[0][0]
min_j, max_j = location[0][1], location[0][1]
for x in location:
if x[0] <= min_i:
min_i = x[0]
elif x[0] >= max_i:
max_i = x[0]
for y in location:
if y[1] <= min_j:
min_j = y[1]
elif y[1] >= max_j:
max_j = y[1]
# answer에 몽땅 넣기
answer.append(min_i)
answer.append(min_j)
answer.append(max_i+1)
answer.append(max_j+1)
return answer
문제 회고
솔직히 내 코드가 조잡하고 긴 것 같은디.. 다른 사람의 풀이를 보자
와 그냥 너무 간단하다.. 굳이 graph라는 이차원 배열을 안 만들고도 할 수 있다니!!
무엇보다 내 코드는 파이썬 문법의 장점을 전혀 사용하고 있지 않은 코드 ㅠㅠ
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]
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스]Lv3. 합승 택시요금(Python) (0) | 2024.02.19 |
---|---|
[프로그래머스]Lv2. 행렬 테두리 회전하기(Python) (0) | 2024.02.19 |
[프로그래머스]Lv2. 문자열 압축(Python) (0) | 2024.02.18 |
[프로그래머스]Lv3. 표현 가능한 이진트리(Python) (1) | 2024.02.13 |
[프로그래머스]Lv2. 혼자 하는 틱택토(Python) (0) | 2024.02.12 |