본문 바로가기
알고리즘/프로그래머스

위클리 챌린지 > 10주차

by vivi 2021. 10. 16.
import java.util.*;

class Point {
	double x, y;

	Point(double x, double y) {
		this.x = x;
		this.y = y;
	}
}

class Solution {
	public String[] solution(int[][] line) {
		String[] answer;
		ArrayList<Point> arr = new ArrayList<>();
		long x_min = Long.MAX_VALUE, x_max = Long.MIN_VALUE;
		long y_min = Long.MAX_VALUE, y_max = Long.MIN_VALUE;
		for (int i = 0; i < line.length; i++) {
			double A = (double) line[i][0];
			double B = (double) line[i][1];
			double E = (double) line[i][2];
			for (int j = i; j < line.length; j++) {
				double C = (double) line[j][0];
				double D = (double) line[j][1];
				double F = (double) line[j][2];
				if (A * D - B * C == 0) {
					continue;
				} else {
					double x = (B * F - E * D) / (A * D - B * C);
					double y = (E * C - A * F) / (A * D - B * C);
					if (x == (long) x && y == (long) y) {
						x_min = Math.min(x_min, (long) x);
						x_max = Math.max(x_max, (long) x);
						y_min = Math.min(y_min, (long) y);
						y_max = Math.max(y_max, (long) y);
						arr.add(new Point(x, y));
					}
				}
			}
		}

		int height = (int) Math.abs(y_max - y_min) + 1;
		int weight = (int) Math.abs(x_max - x_min) + 1;
		char[][] map = new char[height][weight];

		for (int i = 0; i < height; i++) {
			for (int j = 0; j < weight; j++) {
				map[i][j] = '.';
			}
		}

		int len = arr.size();
		for (int i = 0; i < len; i++) {
			Point p = arr.get(i);
			double x = p.x - x_min;
			double y = p.y - y_min;
			map[(int) y][(int) x] = '*';
		}

		answer = new String[(int) height];
		for (int i = 0; i < height; i++) {
			answer[i] = new String(map[height - i - 1]);
		}

		return answer;
	}
}

 

문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/87377

'알고리즘 > 프로그래머스' 카테고리의 다른 글

코딩테스트 연습 > 스택/큐  (0) 2021.10.14
코딩테스트 연습 > 정렬  (0) 2021.10.13
코딩테스트 연습 > 힙(Heap)  (0) 2021.10.13
스킬체크 level 3  (0) 2021.10.12
위클리 챌린지 > 9주차  (0) 2021.10.10

댓글