몸과 마음이 건전한 SW 개발자

프로그래머스 Lv. 2 교점에 별 만들기 Python 본문

알고리즘

프로그래머스 Lv. 2 교점에 별 만들기 Python

스위태니 2024. 1. 3. 22:03

문제 링크

https://school.programmers.co.kr/tryouts/72046/challenges

정답 코드

def solution(line):
    lenLine = len(line)
    
    def isValid(A, B, C, D):
        return A * D - B * C
    
    def uniqueFC(A, B, C, D, E, F, divide):
        x = (B * F - E * D) / divide
        y = (E * C - A * F) / divide
        return x, y
    
    stars = set()
    for i in range(lenLine-1):
        A, B, E = line[i]
        for j in range(i+1, lenLine):
            if i == j:
                continue
            C, D, F = line[j]
            divide = A * D - B * C
            if divide:
                x, y = uniqueFC(A, B, C, D, E, F, divide)
                if float(x).is_integer() and float(y).is_integer():
                    stars.add((x, y))
   
    stars = list(stars)
    xStars = sorted(stars)
    minX, maxX = int(xStars[0][0]), int(xStars[-1][0])
    stars = sorted(stars, key=lambda x: -x[1])
    maxY, minY = int(stars[0][1]), int(stars[-1][1])
    answer = [["." for _ in range(maxX-minX+1)] for _ in range(maxY-minY+1)]
    for x, y in stars:
        nx = abs(int(x) - minX)
        ny = abs(int(y) - maxY)
        answer[ny][nx] = "*"
    result = []
    
    for ans in answer:
        str = ""
        for a in ans:
            str += a
        result.append(str)
    return result

풀이 방법

- 교점을 구하는 공식은 나와있었다.

- 교점의 x좌표와 y좌표가 정수인지 아닌지 확인하는 것이 핵심이었다.

- (확인하고 싶은 정수 또는 실수).is_integer() => 미지수가 정수면 true를 반환한다.

느낀점

- 정수인지 판단하는 함수 모르면 틀리는 문제라고 느꼈다.