[JS] 백준 알고리즘 Node.js 1064. 평행사변형
2023. 3. 8. 10:47ㆍ코딩연습
1. 문제
https://www.acmicpc.net/problem/1064
1064번: 평행사변형
평행사변형은 평행한 두 변을 가진 사각형이다. 세 개의 서로 다른 점이 주어진다. A(xA,yA), B(xB,yB), C(xC,yC) 이때, 적절히 점 D를 찾아서 네 점으로 평행사변형을 만들면 된다. 이때, D가 여러 개 나
www.acmicpc.net
2. 풀이
1. 만들 수 있는 평행사변형 중 가장 큰 둘레의 길이와 가장 작은 둘레의 길이의 차이를 구해야 한다.
2. 문제에서 주어진 점 3개를 이용하여 각각의 길이를 구한 후, 이들 중 가장 긴 변의 길이와 가장 짧은 변의 길이를 찾음.
* 피타고라스의 정리 이용
let ab_length = Math.sqrt((ax - bx)**2 + (ay - by)**2, 2);
let ac_length = Math.sqrt((ax - cx)**2 + (ay - cy)**2, 2);
let bc_length = Math.sqrt((bx - cx)**2 + (by - cy)**2, 2);
let result = Math.max(ab_length, ac_length, bc_length) - Math.min(ab_length, ac_length, bc_length);
3. 평행사변형을 만들 수 없는 경우는 점 3개가 동일한 기울기를 가질 경우, 즉 한 직선에 모두 올라가는 경우이다.
if( (ax - bx) * (ay - cy) === (ax - cx) * (ay - by) ){
console.log("-1.0");
}
4. 둘레의 길이를 구하기 위해서 result 의 값에 2배를 해주어야 한다.
console.log(2 * result);
5. 종합!
const [ax,ay,bx,by,cx,cy] = require('fs').readFileSync('/dev/stdin').toString().split(' ').map(Number);
function main(){
if( (ax - bx) * (ay - cy) === (ax - cx) * (ay - by) ){
console.log("-1.0");
} else {
let ab_length = Math.sqrt((ax - bx)**2 + (ay - by)**2, 2);
let ac_length = Math.sqrt((ax - cx)**2 + (ay - cy)**2, 2);
let bc_length = Math.sqrt((bx - cx)**2 + (by - cy)**2, 2);
let result = Math.max(ab_length, ac_length, bc_length) - Math.min(ab_length, ac_length, bc_length);
console.log(2 * result);
}
}
main();
3. 정리
처음 D점을 어떻게 구해야 하나 생각했었다. 문제에서 둘레의 길이만 구해야 한다는 점을 보고 D점을 찾지 않고도 문제를 해결할 수 있다는 생각을 하게 되었다. 다양한 방식으로 문제에 접근할 수 있도록 문제를 꼼꼼히 읽어야 한다는 생각을 했다.
'코딩연습' 카테고리의 다른 글
[JS] 백준 알고리즘 Node.js 1356. 유진수 (0) | 2023.03.11 |
---|---|
[JS] 백준 알고리즘 Node.js 1296. 팀 이름 정하기. (2) | 2023.03.11 |
[JS] 백준 알고리즘 Node.js 1251. 단어 나누기 (0) | 2023.03.10 |
[JS] 백준 알고리즘 Node.js 5597. 과제 안 내신 분..? (0) | 2022.06.10 |
[JS] 백준 알고리즘 Node.js 3052. 나머지 (0) | 2021.12.31 |