[프로그래머스] Lv1 - 바탕화면 정리

김멉덥·2023년 7월 25일
0

알고리즘 공부

목록 보기
73/171
post-thumbnail
post-custom-banner

문제

프로그래머스 연습문제


코드 구현

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분이 걸렸는데 … 수정할수록 더 꼬이고 어디를 틀렸는지 모르겠을 뿐더러 너무 복잡해서 건드릴 수가 없어서 새로 갈아엎고 정답 코드를 작성하였다 ㅠ

profile
데굴데굴 뚝딱뚝딱 개발기록
post-custom-banner

0개의 댓글