리스트

박진은·2023년 3월 3일
0

코테

목록 보기
3/44

이번에는 리스트 관련된 문제를 풀었다. 나는 나름대로 잘 풀었다고 생각했는데 다른 사람들의 코드를 보고는 너무 잘써서 놀랐다.

바탕화면에서 파일을 드레그해서 한번에 선택해서 삭제하는 방법중 마우스의 이동거리가 가장짧은 좌표를 고르는 문제이다. 이거와 비슷한 문제를 학교 디자인 패턴에서 사용했어서 쉽세풀 수 있었던거 같다.

def find_range_hozantal(hoz_list): # 수펑의 최솟값과 최댓값을 구하는 알고리즌 괄호로 탐색해서 최대와 최소를 찾는다.
    ldy = None
    rdy = None
    e = None
    for i in hoz_list:
        e = i.find("#")
        if e != -1:
            if ldy == None:
                ldy = e
            else:
                if ldy > e:
                    ldy = e

            for j in range(len(i)):
                if i[j] == "#" and rdy == None:
                    rdy = j
                elif i[j] == "#" and rdy != None:
                    if rdy < j:
                        rdy = j
    return (ldy, rdy+1) # 나를 한참이나 괴롭혔던거다


def find_range_Perpendicular(per_list): #수직 방향의 최솟값을 찾는 함수 
    ldx = None
    rdx = None

    new = []
    for i in per_list:
        new.append(list(i))
    for e in range(len(new[0])):
        for i in range(len(new)):
            if new[i][e] == "#" and ldx == None:
                ldx = i
            elif new[i][e] == "#":
                if ldx > i:
                    ldx = i

            if new[i][e] == "#" and rdx == None:
                rdx = i
            elif new[i][e] == "#":
                if rdx < i:
                    rdx = i
    return (ldx, rdx+1)
wall = ["..........", ".....#....", "......##..", "...##.....", "....#....."]
def solution(wallpaper):
    lux = 0
    luy = 0
    rdx = 0
    rdy = 0
    luy, rdy = find_range_hozantal(wallpaper)
    lux, rdx = find_range_Perpendicular(wallpaper)
    answer = [lux, luy, rdx, rdy]
    return answer
print(solution(wall))

위의 코드가 내가 푼 답이다 우선 나는 수평과 수직의 최솟값을 구하기 위해서 수직의 최솟값을 구하는 함수와 최댓값을 구하는 함수를 나눠서 작성했다 하지만 다른 사람의 코드를 보니 훨씬 짧고 파이선 스러웠다 나는 약간 자바 같은 느낌... 자바로 벡엔드 개발을 계속해서 그런거 같다.

위의 문제에서 나는 문제에 대해서 이해를 잘못해서 시간이 오래걸렸다 결국에는 크기가 큰점을 반환할때 +1을 해주는 방식으로 해결을 했다. 필자는 파일이 리스트에 들어있다고 생각했는데 마우스의 좌표는 하나의 파일당 4개가 생긴다. 이점에서 오류가 있었다 다음부터는 문제를 똑바로 이해해야겠다.

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]

이 아름다운 코드는 다른 사람이 풀이한건데 다이나믹하게 진행해서 다른 리스트에 저장후 파이선 기본함수인 min() 과 max() 함수를 사용해서 최대 좌표와 최소 좌표를 구했단 이런 아름다운 사람

profile
코딩

0개의 댓글