📖 문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
💡 풀이 방식
• 브루트포스
두 직선의 교점 과표를 구해 2차원 배열에 표시한다.
이 때 문제에서 제시한 공식을 활용한다!
💥 유의사항
- A,B,C는 long 타입으로 풀기 (-10만 이상, 10만 이하의 정수이므로)
🔺 코드
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
import java.util.*;
class Solution {
public String[] solution(int[][] line) {
List<long[]> list = new ArrayList<>(); // 교점 저장 리스트
long minX = Long.MAX_VALUE;
long maxX = Long.MIN_VALUE;
long minY = Long.MAX_VALUE;
long maxY = Long.MIN_VALUE;
for(int i = 0 ; i < line.length ; i++) { // 직선 1
long a = line[i][0];
long b = line[i][1];
long n1 = line[i][2];
for(int j = i+1 ; j < line.length ; j++) { // 직선 2
long c = line[j][0];
long d = line[j][1];
long n2 = line[j][2];
long xUp = b*n2 - n1*d;
long xDown = a*d - b*c;
long yUp = n1*c - a*n2;
long yDown = a*d - b*c;
if(xDown != 0) {
double x = xUp / (double)xDown;
double y = yUp / (double)yDown;
if(x == Math.ceil(x) && y == Math.ceil(y)) { // 정수의 경우만 저장
list.add(new long[] {(long)x, (long)y});
minX = Math.min(minX, (long)x);
maxX = Math.max(maxX, (long)x);
minY = Math.min(minY, (long)y);
maxY = Math.max(maxY, (long)y);
}
}
}
}
boolean[][] answerTmp = new boolean[(int)(maxY - minY + 1)][(int)(maxX - minX + 1)];
for(long[] c: list) { // 교점 처리
int x = (int) (c[0] - minX);
int y = (int) (c[1] - maxY);
answerTmp[Math.abs(y)][Math.abs(x)] = true;
}
String[] answer = new String[answerTmp.length];
int i = 0;
for(boolean[] bb : answerTmp) {
StringBuilder sb = new StringBuilder();
for(boolean b : bb) {
sb.append(b ? "*" : ".");
}
answer[i++] = sb.toString();
}
return answer;
}
}
|
cs |
➕ 다른 풀이 방식
- 출력 부분이 조금 다르다.
[자바 코테대비] 교점에 별 만들기
문제 설명Ax + By + C = 0으로 표현할 수 있는 n개의 직선이 주어질 때, 이 직선의 교점 중 정수 좌표에 별을 그리려 합니다.예를 들어, 다음과 같은 직선 5개를2x - y + 4 = 0\-2x - y + 4 = 0\-y + 1 = 05x - 8y - 1
velog.io
💦 어려웠던 점
- long형을 써야 한다는 사실,,
- 문제에 제시된 공식을 사용할 생각을 못 했다.
🧐 새로 알게 된 내용
- 공식 활용할 아이디어
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V | 240625 |
(참고)
[프로그래머스] 교점에 별 만들기(Java 자바)
https://programmers.co.kr/learn/courses/30/lessons/87377# 코딩테스트 연습 - 10주차_교점에 별 만들기 [[2, -1, 4], [-2, -1, 4], [0, -1, 1], [5, -8, -12], [5, 8, 12]] ["....*....", ".........", ".........", "*.......*", ".........", ".........
tmdrl5779.tistory.com
'코테 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Level1] 신고 결과 받기 (JAVA) (0) | 2024.07.18 |
---|---|
[프로그래머스/Level2] 우박수열 정적분 (JAVA) (0) | 2024.07.08 |
[프로그래머스/Level3] 부대 복귀 (JAVA) (2) | 2024.06.08 |
[프로그래머스/Level1] [PCCE 기출문제] 10번 / 데이터 분석 (JAVA) (0) | 2024.05.16 |
[프로그래머스/Level3] 스티커 모으기(2) (JAVA) (0) | 2024.05.16 |