와챠의 우당탕탕 코딩 일기장
[BOJ/Kotlin] 11758번 CCW 본문
반응형
문제
2차원 좌표 평면 위에 있는 점 3개 P1, P2, P3가 주어진다. P1, P2, P3를 순서대로 이은 선분이 어떤 방향을 이루고 있는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 P1의 (x1, y1), 둘째 줄에 P2의 (x2, y2), 셋째 줄에 P3의 (x3, y3)가 주어진다. (-10,000 ≤ x1, y1, x2, y2, x3, y3 ≤ 10,000) 모든 좌표는 정수이다. P1, P2, P3의 좌표는 서로 다르다.
출력
P1, P2, P3를 순서대로 이은 선분이 반시계 방향을 나타내면 1, 시계 방향이면 -1, 일직선이면 0을 출력한다.
풀이
신발끈 공식:
빨간 대각선 서로 곱하고 더하기
val a = x1*y2 + x2*y3 + x3*y1
파란 대각선끼리 서로 곱하고 더하기
val b = y1*x2 + y2*x3 + y3*x1
ccw = a-b이고,
ccw > 0 이면 반시계방향
ccw < 0이면 시계방향이다.
import java.util.*
fun main() {
val br = System.`in`.bufferedReader()
val bw = System.out.bufferedWriter()
var st = StringTokenizer(br.readLine())
val x1 = Integer.parseInt(st.nextToken())
val y1 = Integer.parseInt(st.nextToken())
st = StringTokenizer(br.readLine())
val x2 = Integer.parseInt(st.nextToken())
val y2 = Integer.parseInt(st.nextToken())
st = StringTokenizer(br.readLine())
val x3 = Integer.parseInt(st.nextToken())
val y3 = Integer.parseInt(st.nextToken())
val a = x1*y2 + x2*y3 + x3*y1
val b = y1*x2 + y2*x3 + y3*x1
when {
a-b > 0 -> bw.write("1") // 반시계
a-b < 0 -> bw.write("-1") // 시계
a==b -> bw.write("0") // 일직선
}
br.close()
bw.close()
}
첨엔,,, 점 사이의 기울기 이용해서 풀어야 하나? 하고 코드 짰는데 계속 틀리대서,,,검색해봄^^
신발끈 공식이라는 게 있드라........
참으로,,,,,,신기한 알고리즘 세상
참고
https://steady-coding.tistory.com/217
코틀린 언어를 더 배워야겠다는 생각이 든다
반응형
'코딩 일기장 > 백준' 카테고리의 다른 글
[BOJ/Kotlin]히스토그램에서 가장 큰 직사각형 (0) | 2022.03.08 |
---|---|
[백준]탈옥/9376 풀이 JAVA (0) | 2021.08.09 |
[백준]피보나치 수 3/2749 풀이 JAVA (0) | 2021.08.04 |
[백준]행렬제곱/10830 풀이 JAVA (0) | 2021.07.05 |
[백준]이항 계수3/11041 풀이 JAVA (0) | 2021.07.04 |
Comments