프로그래머스 연습문제
- Lv 1. 실패율 (Python)
https://school.programmers.co.kr/learn/courses/30/lessons/161990
def solution(wallpaper):
answer = []
# '.' == 빈칸 / '#' == 파일
# wallpaper의 모든 원소의 길이는 동일
# 파일을 모두 포함하면서, 최소한의 이동거리
# 시작점 == S(lux, luy) / 끝점 == E(rdx, rdy) 의 최소 거리
lux = len(wallpaper)
luy = len(wallpaper[0])
rdx = 0
rdy = 0
for i in range(len(wallpaper)):
for j in range(len(wallpaper[i])):
if(wallpaper[i][j] == "#"):
lux = min(lux, i)
luy = min(luy, j)
rdx = max(rdx, i + 1)
rdy = max(rdy, j + 1)
answer = [lux, luy, rdx, rdy]
return answer
x 좌표의 최소값
, y 좌표의 최소값
x 좌표의 최대값 + 1
, y 좌표의 최대값 + 1
min()
, max()
로 구할 수 있다.lux
, luy
값은 최소값을 구해야하므로 초기 값 설정은 wallpaper
의 가로와 세로 길이로 우선 설정해둔다.rdx
, rdy
값은 최대값을 구해야하므로 초기 값 설정을 0으로 해준다.기존 코드 → 그러나 테스트케이스 일부를 실패하였다. 아무래도 끝점의 값을 구하는 부분이 문제인 것 같다.
def solution(wallpaper):
answer = []
file = []
s = []
e = []
for i in range(len(wallpaper)):
for j in range(len(wallpaper[i])):
if(wallpaper[i][j] == "#"):
file.append((i, j))
file.sort()
print(file)
# 시작점 얻기
start = ()
for i in range(len(file)):
dis = file[i][0] + file[i][1]
s.append(dis)
if((dis in s) and (dis <= min(s))):
start = (min(file[s.index(dis)][0], file[i][0]), min(file[s.index(dis)][1], file[i][1]))
else:
start = min((file[s.index(min(s))][0], file[s.index(min(s))][1]), start)
# 끝 점 얻기
end = ()
for i in range(len(file)):
dis = (file[i][0] + 1) + (file[i][1] + 1)
e.append(dis)
end = (max((file[i][0] + 1), file[e.index(max(e))][0] + 1), max((file[i][1] + 1), file[e.index(max(e))][1] + 1))
answer += start + end
return answer
이 코드 짜느라 40분이 걸렸는데 … 수정할수록 더 꼬이고 어디를 틀렸는지 모르겠을 뿐더러 너무 복잡해서 건드릴 수가 없어서 새로 갈아엎고 정답 코드를 작성하였다 ㅠ