Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

forDevLife

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

알고리즘

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

JH_Lucid 2022. 8. 3. 14:09

문제 링크


 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

접근


1. combination으로 경우의 수를 만들고 교점을 추출한다.

2. 해당 교점이 정수라면 result에 넣는다.

3. result에서 x_min, x_max, y_min, y_max를 뽑고, 해당 사이즈 만큼 배열을 만들어 '.'로 초기화 한다.

4. result를 하나씩 반복하며 일치하는 좌표에 '*'를 넣는다.

 

 

코드


def solution(line):
    result = []
    for i in range(0, len(line) - 1):
        A, B, E = line[i]
        for j in range(i + 1, len(line)):
            C, D, F = line[j]
            denominator = (A * D) - (B * C)
            if denominator == 0:
                continue

            x = ((B * F) - (E * D)) // denominator
            y = ((E * C) - (A * F)) // denominator

            if ((B * F) - (E * D)) % denominator == 0 and ((E * C) - (A * F)) % denominator == 0:
                result.append([x, y])

    xs = [r[0] for r in result]
    x_min = min(xs)
    x_max = max(xs)

    ys = [r[1] for r in result]
    y_min = min(ys)
    y_max = max(ys)

    answer = [['.'] * (x_max - x_min + 1) for _ in range(y_max - y_min + 1)]

    for r in result:
        x, y = r
        answer[y - y_min][x - x_min] = "*"

    return [''.join(ans) for ans in answer][::-1]
  • 배열과 좌표의 y의 방향은 아래처럼 서로 반대방향이다. 따라서 반환할 때는 뒤집어서 반환한다.

왼쪽 : 배열 / 오른쪽 : 좌표

 

 

헷갈린 점


새로 생성된 배열로 좌표를 계산하는게 헷갈렸다.. 이게 헷갈릴것인지는 모르겠지만 ㅠ

아래와 같은 배열이 있다고 했을 때, x의 최대가 2, 최소가 -2로 고정된다고 가정하자.

 

 

최소 ~ 최대의 범위로 새로운 배열을 만들면 아래와 같이 될 것이다.

이 때 기존(실제)좌표를 새로운 곳에 반영하기 위해서 (실제 - 최소)로 계산하면 된다.

 

따라서 아래와 같은 위치에 매핑하면 된다.

    for r in result:
        x, y = r
        answer[y - y_min][x - x_min] = "*"
Comments