[프로그래머스] 교점에 별 만들기

yunu·2022년 3월 28일
0
post-thumbnail

출처: 프로그래머스 코딩 테스트 연습, [프로그래머스] 교점에 별 만들기

풀이

문제에서 알려준 대로 그대로 구현하였다.
1. 교점이 정수인지 실수인지 확인하는 메서드를 만든다. 잘 만들었는지 모르겠지만 작동하긴 한다.
2. 주어진 선분의 정보를 이중 for문을 돌려서 정수인 교점만 교점 리스트에 저장한다.
3. 맵을 그리기 위해 x축으로 가장 큰 좌표와 작은 좌표, y축으로 가장 큰 좌표와 작은 좌표를 구한다.
4. 위에서 구한 최대, 최소 좌표들로 맵의 가로 세로를 정해여 그린다.
5. 정수인 교점을 맵에 그려준다.
6. 맵이 상하 반전이기 때문에 상하로 뒤집어 준다.

코드

def solution(line):
    
    # 실수인지 정수인지 판단하는 메서드
    def check_int(n1, n2):
        if float(n1) == int(n1) and float(n2) == int(n2):
            return True
        return False
    
    # 정수인 교점을 저장하는 리스트
    point = []
    for A, B, E in line:
        for C, D, F in line:
            if A == C and B == D and E == F:
                continue
            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 check_int(x, y):
                point.append((int(x), int(y)),)

    # 맵의 가로, 세로 크기를 구하기 위해 최소, 최대값 구하기
    min_x = min(point, key=lambda x: x[0])[0]
    max_x = max(point, key=lambda x: x[0])[0]
    min_y = min(point, key=lambda x: x[1])[1]
    max_y = max(point, key=lambda x: x[1])[1]
    
    star_map = [['.' for _ in range(max_x - min_x + 1)] for _ in range(max_y - min_y + 1)]
    # 해당되는 교점에 별 찍기
    for x, y in point:
        star_map[y - min_y][x - min_x] = '*'
    
    # 상하반전되어 있는 리스트를 반전시키고 문자열로 변환
    answer = []
    for line in star_map[::-1]:
        answer.append(''.join(line))
    
    return answer
profile
rip

0개의 댓글