728x90
전체 코드
import java.util.*;
class Solution {
public int solution(int[][] dots) {
int answer = 0;
float[] line = new float[6]; //기울기 세는 배열
//index로 돌리면서 바로 채움 line에
int index = 0;
for(int i = 0; i < 3; i++) {
for(int j = i + 1; j < 4; j++) {
float result
= (float)(dots[i][1] - dots[j][1])
/ (float)(dots[i][0] - dots[j][0]);
line[index] = result;
index++;
}
}
//평행 체크
for(int k = 0; k < line.length-1 ; k++){
for(int m=k+1; m<line.length;m++) {
if (line[k] == line[m]) return 1;
}
}
return answer;
}
}
모든 경우의 수를 구하는 브루트 포스 알고리즘을 사용했습니다.
이 문제를 풀 때 기본 전제는 네개의 점일 때이며, 이 수는 변하지 않는다는 것입니다.
그래서 대부분의 배열이 직접 숫자로 입력하는 하드코딩이 많습니다.
풀이 코드
이 문제는 평행이 존재하기만 하면 1을 리턴 하는 문제이다.
몇 번 나오는지 수를 셀 필요가 없다.
그러니 모든 나올 수 있는 모든 기울기를 구하고, 기울기를 비교하는 방법으로 햇다.
(문제를 착각하고 경우의 수를 세려다가 엄청난 시간을 낭비했다ㅠㅠ)
1.모든 경우의 기울기는 4*3/2로 총 6개.
그러므로 모든 기울기를 담을 int[6]의 배열을 만든다.3중 for문으로 채워나갈 수도 있었으나, 편의성을 위해 index로 진행했다.
line[index]를 기울기로 채우는데,
dots[0][0]~ dots[1][1] 까지 경우의 수로 기울기를 구한다.
기울기는 result로,(y2 - y1)/(x2 - x1)
방식을 사용했다.평행체크도 마찬가지로 모든 경우의 수를 찾기로 했다.
단,return 1;
을 추가하여 만족하는 순간 솔루션을 종료한다.
마지막까지 평행하는 조건이 없다면, answer=0이었기 때문에 0으로 종료된다.
728x90
'프로그래밍(Programming) > 알고리즘' 카테고리의 다른 글
프로그래머스 : 스킬트리 (0) | 2022.12.21 |
---|---|
프로그래머스 : 완주하지 못한 선수 (0) | 2022.11.15 |
다음에 올 숫자 (0) | 2022.11.09 |
프로그래머스 : 옹알이(1) (0) | 2022.11.07 |
백준 1157 (0) | 2022.10.24 |