https://programmers.co.kr/learn/courses/30/lessons/87377
๋ฌธ์
Ax + By + C = 0์ผ๋ก ํํํ ์ ์๋ n๊ฐ์ ์ง์ ์ด ์ฃผ์ด์ง ๋, ์ด ์ง์ ์ ๊ต์ ์ค ์ ์ ์ขํ์ ๋ณ์ ๊ทธ๋ฆฌ๋ ค ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ ์ง์ 5๊ฐ๋ฅผ
- 2x - y + 4 = 0
- -2x - y + 4 = 0
- -y + 1 = 0
- 5x - 8y - 12 = 0
- 5x + 8y + 12 = 0
์ขํ ํ๋ฉด ์์ ๊ทธ๋ฆฌ๋ฉด ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ต๋๋ค.
์ด๋, ๋ชจ๋ ๊ต์ ์ ์ขํ๋ (4, 1), (4, -4), (-4, -4), (-4, 1), (0, 4), (1.5, 1.0), (2.1, -0.19), (0, -1.5), (-2.1, -0.19), (-1.5, 1.0)์
๋๋ค. ์ด ์ค ์ ์๋ก๋ง ํํ๋๋ ์ขํ๋ (4, 1), (4, -4), (-4, -4), (-4, 1), (0, 4)์
๋๋ค.
๋ง์ฝ ์ ์๋ก ํํ๋๋ ๊ต์ ์ ๋ณ์ ๊ทธ๋ฆฌ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์์ ๊ทธ๋ฆผ์ ๋ฌธ์์ด๋ก ๋ํ๋ผ ๋, ๋ณ์ด ๊ทธ๋ ค์ง ๋ถ๋ถ์ *, ๋น ๊ณต๊ฐ(๊ฒฉ์์ ์ด ๊ต์ฐจํ๋ ์ง์ )์ .์ผ๋ก ํํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
"..........."
".....*....."
"..........."
"..........."
".*.......*."
"..........."
"..........."
"..........."
"..........."
".*.......*."
"..........."
์ด๋ ๊ฒฉ์ํ์ ๋ฌดํํ ๋์ผ๋ ๋ชจ๋ ๋ณ์ ํฌํจํ๋ ์ต์ํ์ ํฌ๊ธฐ๋ง ๋ํ๋ด๋ฉด ๋ฉ๋๋ค.
๋ฐ๋ผ์ ์ ๋ต์
"....*...."
"........."
"........."
"*.......*"
"........."
"........."
"........."
"........."
"*.......*"
์ ๋๋ค.
์ง์ A, B, C์ ๋ํ ์ ๋ณด๊ฐ ๋ด๊ธด ๋ฐฐ์ด line์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. ์ด๋ ๋ชจ๋ ๋ณ์ ํฌํจํ๋ ์ต์ ์ฌ๊ฐํ์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ ์ฌํญ
- line์ ์ธ๋ก(ํ) ๊ธธ์ด๋ 2 ์ด์ 1,000 ์ดํ์ธ ์์ฐ์์
๋๋ค.
- line์ ๊ฐ๋ก(์ด) ๊ธธ์ด๋ 3์ ๋๋ค.
- line์ ๊ฐ ์์๋ [A, B, C] ํํ์ ๋๋ค.
- A, B, C๋ -100,000 ์ด์ 100,000 ์ดํ์ธ ์ ์์ ๋๋ค.
- ๋ฌด์ํ ๋ง์ ๊ต์ ์ด ์๊ธฐ๋ ์ง์ ์์ ์ฃผ์ด์ง์ง ์์ต๋๋ค.
- A = 0์ด๋ฉด์ B = 0์ธ ๊ฒฝ์ฐ๋ ์ฃผ์ด์ง์ง ์์ต๋๋ค.
- ์ ๋ต์ 1,000 * 1,000 ํฌ๊ธฐ ์ด๋ด์์ ํํ๋ฉ๋๋ค.
- ๋ณ์ด ํ ๊ฐ ์ด์ ๊ทธ๋ ค์ง๋ ์ ๋ ฅ๋ง ์ฃผ์ด์ง๋๋ค.
์ฐธ๊ณ ์ฌํญ
Ax + By + E = 0
Cx + Dy + F = 0
๋ ์ง์ ์ ๊ต์ ์ด ์ ์ผํ๊ฒ ์กด์ฌํ ๊ฒฝ์ฐ, ๊ทธ ๊ต์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋, AD - BC = 0์ธ ๊ฒฝ์ฐ ๋ ์ง์ ์ ํํ ๋๋ ์ผ์นํฉ๋๋ค.
ํ์ด
1๏ธโฃ ์ ์ ์์ ์ด์ฉํด์ ์ ์์ธ ๊ต์ ์ ๊ตฌํด์ค๋ค.
โ AD-BC != 0 ์ธ ๊ต์ ๋ง โผ๏ธ
2๏ธโฃ ๊ต์ ์ ์ขํ๋ค ์ค ์ต๋๊ฐ๊ณผ ์ต์๊ฐ์ ๊ตฌํด์ค๋ค.
3๏ธโฃ ๋์ด์ ๋๋น์ ๋ง๊ฒ '.' ๋ฅผ ์ฐ๋๋ค.
4๏ธโฃ ๊ฐ ์ขํ์ ๋ง๊ฒ ๋ณ์ ์ฐ๋๋ค.
๋ํ~๐โ๏ธ
์ฝ๋
import java.util.ArrayList;
import java.util.List;
public class Main_P_10์ฃผ์ฐจ_๊ต์ ์๋ณ๋ง๋ค๊ธฐ {
static class coordinate{
int x;
int y;
coordinate(int x, int y){
this.x = x;
this.y = y;
}
}
static int startX = Integer.MAX_VALUE;
static int startY = Integer.MAX_VALUE;
static int endX = Integer.MIN_VALUE;
static int endY = Integer.MIN_VALUE;
public static String[] solution(int[][] line) {
String[] answer = {};
List<coordinate> cList = new ArrayList<>();
for(int i = 0 ; i < line.length ; i++){
for(int j = i+1; j < line.length ; j++){
long a = line[i][0];
long b = line[i][1];
long e = line[i][2];
long c = line[j][0];
long d = line[j][1];
long f = line[j][2];
long denominator = (a*d) - (b*c);
if(denominator == 0) continue;
long integerVerification1 = (b*f) - (e*d);
long integerVerification2 = (e*c) - (a*f);
if(integerVerification1 % denominator != 0 || integerVerification2 % denominator != 0) continue;
coordinate coord = new coordinate((int)(((b*f) - (e*d))/denominator), (int)(((e*c) - (a*f))/denominator));
if(!cList.contains(coord))
cList.add(coord);
startX = Math.min(startX, coord.x);
startY = Math.min(startY, coord.y);
endX = Math.max(endX, coord.x);
endY = Math.max(endY, coord.y);
}
}
// System.out.println(startX + " " + startY + " " + endX + " " + endY);
ArrayList<String> board = new ArrayList<>();
for(int i = startY; i <= endY; i++){
StringBuilder sb = new StringBuilder();
for(int j = startX; j <= endX ; j++)
sb.append(".");
board.add(sb.toString());
}
int yLen = board.size() / 2;
int xLen = board.get(0).length() / 2;
for(coordinate c : cList){
int x = Math.abs(c.x - startX);
int y = Math.abs(c.y - startY);
// System.out.println(x + " " + y);
StringBuilder sb = new StringBuilder(board.get(y));
board.remove(y);
sb.setCharAt(x, '*');
board.add(y, sb.toString());
}
answer = new String[board.size()];
for(int i = 0 ; i < board.size() ; i++){
answer[i] = board.get(board.size()-i-1);
}
return answer;
}
public static void main(String[] args) {
// int[][] line = {{2, -1, 4}, {-2, -1, 4}, {0,-1,1}, {5,-8,-12},{5,8,12}};
int[][] line = {{0,1,-1}, {1,0,-1}, {1,0,1}};
String[] answer = solution(line);
for(String a : answer)
System.out.println(a);
}
}