쵼쥬
쵼쥬의 개발공부 TIL
쵼쥬
전체 방문자
오늘
어제
  • 분류 전체보기 (276)
    • 코딩테스트 (192)
      • [알고리즘] 알고리즘 정리 (7)
      • [백준] 코딩테스트 연습 (126)
      • [프로그래머스] 코딩테스트 연습 (59)
    • Spring (71)
      • [인프런] 스프링 핵심 원리- 기본편 (9)
      • [인프런] 스프링 MVC 1 (6)
      • [인프런] 스프링 MVC 2 (4)
      • [인프런] 실전! 스프링 부트와 JPA 활용1 (7)
      • [인프런] 실전! 스프링 부트와 JPA 활용2 (5)
      • [인프런] 실전! 스프링 데이터 JPA (7)
      • [인프런] 실전! Querydsl (7)
      • JWT (5)
      • [인프런] Spring Cloud (17)
      • [인프런] Spring Batch (4)
    • Java (6)
      • [Java8] 모던인자바액션 (4)
      • [부스트코스] 웹 백엔드 (2)
      • [패스트캠퍼스] JAVA STREAM (0)
    • CS (6)
      • 디자인 패턴과 프로그래밍 패터다임 (2)
      • 네트워크 (4)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • 위클리 챌린지
  • 부스트코스
  • 코딩테스트
  • 타임리프
  • 스프링
  • 누적합
  • 인프런
  • 알고리즘
  • MVC
  • querydsl
  • 백준
  • jpa
  • BFS
  • 백분
  • spring
  • 자바
  • 구현
  • Spring Data JPA
  • 프로그래머스
  • 비트마스킹

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
쵼쥬
코딩테스트/[프로그래머스] 코딩테스트 연습

교점에 별 만들기

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

교점에 별 만들기

2021. 10. 17. 20:22


풀이 방법

모든 직선들을 비교해서 교점을 찾아주었다. 교점을 찾아서 list에 넣어줄때 정수로 된 좌표가 아니면 넣지 않고 제거 했다.

교점을 찾을때 그릴 좌표평면의 크기를 찾기 위해 x,y 별로 Max, Min 값을 구해서 크기를 구해주었다.

좌표 평면을 모두 .으로 그리고 찾은 좌표의 값을 * 로 바꿔주었다.

이 문제에서는 정수의 범위를 생각하는 것이 중요하다.

직선 식에 있는 정수들을 -100000 이상 100000 이하이기 때문에 계산하게 되면 최악의 경우 100000 * 100000 이 되서 Long 타입으로 바꿔서 계산해 주었다.

 

내 코드

import java.awt.*;
import java.io.*;
import java.util.*;

class Solution {
    static int minX = Integer.MAX_VALUE;
    static int minY = Integer.MAX_VALUE;
    static int maxX = Integer.MIN_VALUE;
    static int maxY = Integer.MIN_VALUE;
    
    public String[] solution(int[][] line) {
        String[] answer;
        ArrayList<Point> list = new ArrayList<>();

        for (int i = 0; i < line.length; i++) {
            for (int j = i + 1; j < line.length; j++) {
                Long A = Long.valueOf(line[i][0]);
                Long B = Long.valueOf(line[i][1]);
                Long C = Long.valueOf(line[j][0]);
                Long D = Long.valueOf(line[j][1]);
                Long E = Long.valueOf(line[i][2]);
                Long F = Long.valueOf(line[j][2]);

                Long z = (A * D) - (B * C);

                if (z == 0)
                    continue;
                else {
                    if ((B * F - E * D) % z == 0
                            && (E * C - A * F) % z == 0) {

                        int x = (int) ((B * F - E * D) / z);
                        int y = (int) ((E * C - A * F) / z);
                        
                        if(!list.contains(new Point(x,y))){
                            list.add(new Point(x, y));
                            if (x < minX)
                                minX = x;
                            if (x > maxX)
                                maxX = x;
                            if (y < minY)
                                minY = y;
                            if (y > maxY)
                                maxY = y;
                        }
                    }
                }
            }
        }

        answer = new String[Math.abs(maxY - minY + 1)];
        for (int j = 0; j < answer.length; j++) {
            String str = "";
            for (int i = 0; i < Math.abs(maxX - minX + 1); i++) {
                str += ".";
            }
            answer[j] = str;
        }

        
        for (int i = 0; i < list.size(); i++) {
            Point point = list.get(i);
            answer[maxY - point.y] = answer[maxY - point.y].substring(0, point.x - minX) + "*" + answer[maxY - point.y].substring(point.x - minX + 1);
        }
        
   
        return answer;
    }
}

'코딩테스트 > [프로그래머스] 코딩테스트 연습' 카테고리의 다른 글

추석 트래픽  (0) 2021.10.21
아이템 줍기  (0) 2021.10.20
뉴스 클러스터링  (0) 2021.10.08
단체 사진 찍기  (0) 2021.10.08
카카오프렌즈 컬러링북  (0) 2021.10.08
    '코딩테스트/[프로그래머스] 코딩테스트 연습' 카테고리의 다른 글
    • 추석 트래픽
    • 아이템 줍기
    • 뉴스 클러스터링
    • 단체 사진 찍기
    쵼쥬
    쵼쥬

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.