링크

교점에 별 만들기

난이도

  • 프로그래머스 난이도 2
    • 나의 약점인 행렬이라 난이도 3 드립니다.

문제요약

  • Ax+By+E형식으로 된 선분들의 정보가 제공될때, 정수로된 교점을 찾고, ["*.*",".*."]처럼 교점에는 별을, 그외에는 .을 출력
    • 그릴때에는 [“...”]이렇게 나오는경우 별이 그려진 영역에 맞춰 잘라서 [“.“]로 출력해준다.

접근

    1. 각 선분마다 교점 알고리즘 적용하여 교점 구하기

간단 알고리즘

  • 교점 구하기
    • 이미 제공된 교점 알고리즘을 적용한다.
      • Ax+By+E,Cx+Dy+F 일때
      • 제공된교점공식
    • 추가적으로 확인해야하는 정수로된 교점이므로 확인할값 % 1 == 0을 통해 0이나오면 정수로 판단하여 교점을 구한다.
    • point에 저장한다.
  • 별 그리기 준비
    • 배열로 표시하기위한 준비가 필요하며 위에서 만든 교점의 모음을 통해 진행한다.
    • 교점의 크기에 딱맞는 크기의 배열을 구해야 하기때문에 이과정이 필요하다.
    • left,right,up,down으로 left는 x인 가로축의 최소, right는 x의 최대, up은 y의 최대, down은 y의 최소로 구한다.
    • width는 가로길이(right-left+1), hegith는 (up-down+1)로 각각 가로와 세로를 구해준다.
      • 1을 더하는 이유는 (0,0)좌표가 중앙에 존재하기 때문에 하나씩 높이가 늘어난다고 생각하면된다.
    • 가로길이, 세로길이를 통해 배열로 "."으로 구성된 별을 그릴 2차원 배열을 생성한다.
    • star로 저장(2차원배열)
  • 별 그리기
    • 별을 그리기 위해서는 (0,0)의 중앙좌표에 맞춰 표현된 교점의 좌표를 좌측상단의 (0,0)으로 시작하는 배열 좌표로 변환이 필요하다.
      • ex) 실제교점의 가로축 x=[-2,-1,0,1,2,3,4] 교점의 세로축 y=[-8,-7,-6,-5,-4]로 존재할때, 실제로 그려지는 배열에 맞게 변환하면 x=[0,1,2,3,4,5,6] y=[0,1,2,3,4]로 변환해야 배열의 좌표에 맞게 그릴 수 있다.
      • 이해가 안되면 그림을 그려보자
    • 좌표변환
      • 교점에서는 x,y이지만, 실제 배열에서는 [y좌표][x좌표]로 높이가 앞쪽에 나오는것을 주의하자
    • 각 point별로 x좌표는 left-x,y좌표는 up-y를 진행해준다.
      • star[up-y][left-x]="*"를 통해 해당 배열의 값을 .에서*로 치환해준다.

후기

  • 교점을 구하고 별을 그릴 준비를 하느데 큰 어려움은 없었다.
  • 하지만 실제로 별을 그리는 부분에서 나의 약점인 행렬의 좌표변형에서 머리가 터지는줄 알았다.
  • 실제 좌표를, 배열로 변환하는 과정을 제대로 표현하지 못하였고 오래걸렸다.
  • 그림을 그려보고 좀더 생각을 했을때 깨우치고 풀 수 있었다.