[ Algorithm Link ]
최종 코드 미리보기
class Solution {
fun solution(dots: Array<IntArray>): Int {
var answer = 0
(dots.indices).map { dotA ->
var excluedDotA = dots.filterIndexed { index, _ -> index !=dotA }
excluedDotA.mapIndexed { dotBIndex, dotB ->
var line = listOf(dots[dotA], dotB)
var otherLine = excluedDotA.filterIndexed { index, _ -> index != dotBIndex }
fun inclination(arr : List<IntArray>): Double {
var x = arr[1][0].toDouble() - arr[0][0].toDouble()
var y = arr[1][1].toDouble() - arr[0][1].toDouble()
return y / x
}
if (inclination(line) == inclination(otherLine)) {
answer = 1
}
}
}
return answer
}
}
[ 작성 코드 ]
- 점마다 해당 점을 제외한 나머지 점과 직선을 이루게 만들고, 두 점을 제외한 나머지 점을 직선으로 이어서 기울기가 일치하는 경우 1을 리턴하도록 함
- 🟥 testCase2 의 경우 기울기가 소숫점이 나와서 기울기에 타입은 double을 사용.
제출코드 1 - 테스트 1, 10, 12, 14 실패
더보기
1. 직선간의 거리를 통해서 값을 구해보려고 시도함.
[ 제출 코드 ]
class Solution {
fun solution(dots: Array<IntArray>): Int {
var answer = 0
(dots.indices).map { dotA ->
var tt = dots.filterIndexed { index, _ -> index !=dotA }
tt.mapIndexed { dotBIndex, dotB ->
var line = listOf(dots[dotA], dotB)
var outerLine = tt.filterIndexed { index, _ -> index != dotBIndex }
var lengthA_X = arrayOf<IntArray>(intArrayOf(Math.abs(line[0][0]-outerLine[0][0]),Math.abs(line[0][1]-outerLine[0][1])))
var lengthA_Y = arrayOf<IntArray>(intArrayOf(Math.abs(line[0][0]-outerLine[1][0]),Math.abs(line[0][1]-outerLine[1][1])))
var lengthB_X = arrayOf<IntArray>(intArrayOf(Math.abs(line[1][0]-outerLine[0][0]),Math.abs(line[1][1]-outerLine[0][1])))
var lengthB_Y = arrayOf<IntArray>(intArrayOf(Math.abs(line[1][0]-outerLine[1][0]),Math.abs(line[1][1]-outerLine[1][1])))
var compare = listOf( lengthA_X,lengthA_Y,lengthB_X,lengthB_Y)
compare.forEachIndexed{ index, intArrays ->
(compare.indices-index).map{
println("it = $it , compare[index] = ${compare[index][0].toList()}, compare[it] = ${compare[it][0].toList()}," )
if ( compare[index][0].contentEquals (compare[it][0])) {
answer = 1
println("answer = $answer")
}
}
}
println(" lengthAX AY BX BY ${lengthA_X[0].toList()} ${lengthA_Y[0].toList()} ${lengthB_X[0].toList()} ${lengthB_Y[0].toList()}")
println("${dotA} = ${line[0].toList()} ${line[1].toList()}")
}
}
return answer
}
}
[ 원인 ]
1. [ A-B] [C-D] 와 같이 직선을 그었을 때, 점 간의 거리 [A-B][C-D] 직선 사이의 거리를 구할 순 없었다 ( 직선이 평행하지 않음에도, 직선 점 간의 거리를 대각선으로 잇는 선의 길이가 일치할 때도 1을 리턴하는 문제 )
2. 점 간의 거리가 일치하지 않아도 평행할 수 있다.
[ 해결방법 ]
직선의 기울기를 구하면 해결된다.
알고리즘 회고
알고리즘을 풀 만한 문법, 전반적인 메서드에 대한 개념이 확립되지 않은 상태로 머리 맞대고 억지로 풀고 있다는 생각이 들었다. 노가다로라도 풀고나서 다른 사람의 깔끔한 풀이를 보면서 비교 하다보다보면 사고력도 기를 수 있으려나 했는데, 시간 소요도 많고 미련한 방법같다.
당분간은 알고리즘을 풀지 않고 언어 전반적인 학습을 먼저 한 다음, 알고리즘을 다시 풀 예정.
다시 알고리즘을 풀때도, 어느 수준(Lv2~3)전 까지는 당장 해결이 안되는 부분이나 빠르게 답이 나오지 않을 것 같은 상황에서는 다른 사람의 풀이를 참고하거나 바로 검색을 하는 방식으로 문제 푸는 방법을 바꿔야 될 것 같다.
[Reference]
'Algorithm' 카테고리의 다른 글
[Algorithm - Stack] Kotlin - programmers Lv1 [ 크레인 게임 ] (0) | 2024.04.23 |
---|---|
[Algorithm - Unicode] Kotlin - programmers Lv1 [ 시저 암호 ] (0) | 2024.04.16 |
[Algorithm] Kotlin - programmers Lv0 [ 안전지대 ] - 테스트 8, 9번 에러 해결 (1) | 2024.03.20 |
[Algorithm] Kotlin - programmers lv0 [ 겹치는 선분의 길이 ] - 테스트 1, 9번 오류 해결 (0) | 2024.03.15 |
[Algorithm] Kotlin - 프로그래머스 입문 [ 연속된 수의 합 ] (0) | 2024.03.10 |