파이썬 문제 풀이중 이해가 안가는 부분이 생겨서 질문드립니다

조회수 1206회
def solution(line):
    n = len(line)  # 직선의 개수
    pos, answer = [], [] 
    x_min = y_min = int(1e15) 
    x_max = y_max = -int(1e15)

    # 교점 구하기
    for i in range(n):
        a, b, e = line[i]
        for j in range(i + 1, n):
            c, d, f = line[j]

            if a * d == b * c:  # 두 직선이 평행하거나 일치하는 경우
                continue

            x = (b * f - e * d) / (a * d - b * c)
            y = (e * c - a * f) / (a * d - b * c)

            if x.is_integer() and y.is_integer():  # 교점의 좌표가 정수인지 확인
                x = int(x)
                y = int(y)
                pos.append([x, y])  # 배열에 추가
                # x, y좌표의 최소값, 최대값 구하기
                x_min = min(x_min, x)
                x_max = max(x_max, x)
                y_min = min(y_min, y)
                y_max = max(y_max, y)

    # 사각형의 가로, 세로 길이 구하기
    width = abs(x_max - x_min) + 1
    height = abs(y_max - y_min) + 1
    # 교점이 표시되지 않은 사각형 생성
    answer = [['.'] * width for _ in range(height)]

    pos = sorted(pos, key=lambda k: -k[1]) # 문제의 부분... 역순으로 표기되는 문제 해결위해?

    # 교점을 사각형에 표시
    for x, y in pos:
        nx = x - x_min
        ny = y_max - y
        answer[ny][nx] = '*'

    # 문자열 형태로 변환후 반환
    return list(map(''.join, answer))

교점에 별 만들기 https://school.programmers.co.kr/learn/courses/30/lessons/87377 프로그래머스 코딩테스트 문제 풀이 전략 : 파이썬 편 에서 해당 문제를 풀고 해설을 보던 도중

pos = sorted(pos, key=lambda k: -k[1])  # 역순으로 출력하기 위해?

이 부분이 어떠한 역할을 하는지 잘 이해가 안가서 "책 상에서는 역순으로 출력되는 문제를 해결하기 위해" 라고 되어있는데 주석처리하고 실행 해보아도 문제가 없어서 어떠한 역할을 위해 존재하는가...? 뭐지...? 라는 의문이 들어서 시간복잡도만 희생되는 부분인가 싶고.. 힌트라도 조금만 주신다면 정말 감사하겠습니다

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기
    >>> sorted(array)
    [1, 2, 4, 7, 444]
    >>> sorted(array, key=lambda k: -k)
    [444, 7, 4, 2, 1]
    
    • - 는 소팅의 방향을 바꿉니다.
    >>> sorted(array, key=lambda k: k[0])
    [(1, 1), (1, 100), (1, 7), (2, 2), (3, 0)]
    >>> sorted(array, key=lambda k: k[1])
    [(3, 0), (1, 1), (2, 2), (1, 7), (1, 100)]
    

    k[0] 이면, x좌표, k[1] 이면, y좌표를 기준으로 정렬합니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)