문제
창영이는 삼각형의 종류를 잘 구분하지 못한다. 따라서 프로그램을 이용해 이를 외우려고 한다.
삼각형의 세 각을 입력받은 다음,
세 각의 크기가 모두 60이면, Equilateral
세 각의 합이 180이고, 두 각이 같은 경우에는 Isosceles
세 각의 합이 180이고, 같은 각이 없는 경우에는 Scalene
세 각의 합이 180이 아닌 경우에는 Error
를 출력하는 프로그램을 작성하시오.
입력
총 3개의 줄에 걸쳐 삼각형의 각의 크기가 주어진다. 모든 정수는 0보다 크고, 180보다 작다.
출력
문제의 설명에 따라 Equilateral, Isosceles, Scalene, Error 중 하나를 출력한다.
예제 입력 1
60
70
50
예제 출력 1
Scalene
나는 처음에 이 문제를 보고 아래와 같이 작성했다
const fs = require('fs')
const input = fs.readFileSync('/dev/stdin').toString().split("\n")
const sum = Number(input[0])+Number(input[1])+Number(input[2])
if((input[0]===60)&&(input[1]===60)&&(input[2]===60)){
console.log('Equilateral')
} else if ((sum === 180) && (input[0] === input[1]) || (input[0] === input[2]) || (input[2] === input[1])){
console.log('Isosceles')
} else if ((sum === 180) && (input[0] !== input[1]) && (input[1] !== input[2]) && (input[0] !== input[2])){
console.log('Scalene')
} else if (sum !== 180){
console.log('Error')
}
근데 틀렸다고 나오길래 Isosceles 부분에서 3 각이 모두 같을때에도 해당이 될 것 같아서 저걸 모두 분기시켰다
const fs = require('fs')
const input = fs.readFileSync('/dev/stdin').toString().split("\n")
const sum = Number(input[0])+Number(input[1])+Number(input[2])
if((input[0]===60)&&(input[1]===60)&&(input[2]===60)){
console.log('Equilateral')
} else if ((sum === 180) && (input[0] === input[1]) && (input[0] !== input[2])){
console.log('Isosceles')
} else if ((sum === 180) && (input[0] === input[2]) && (input[0] !== input[1])){
console.log('Isosceles')
} else if ((sum === 180) && (input[2] === input[1]) && (input[0] !== input[2])){
console.log('Isosceles')
} else if ((sum === 180) && (input[0] !== input[1]) && (input[1] !== input[2]) && (input[0] !== input[2])){
console.log('Scalene')
} else if(sum !== 180){
console.log('Error')
}
그런데도 에러가 나왔다
아무리 생각해도 뭐가 틀렸는지 모르겠다
그래서 결국 검색을 했다
항상 구글에 노드로 백준을 검색하면 나오는 블로그를 보았다
매번 볼때마다 느끼지만 참 간단하고 생각지도 못한 방법으로 해결을 하셨다
이번에도 보자마자 와,,, 라고 생각했다
이분은 Set이라는 객체를 이용해서 문제를 푸셨다
set객체는 같은 원소가 중복으로 들어갈 수 없다는걸 사용하신것이다
그걸 그대로 따라 붙여넣지 않고 한번 보고 다시 작성을 해보았다
const fs = require('fs')
const input = fs.readFileSync('/dev/stdin').toString().trim().split("\n").map(Number)
const sum = input[0]+input[1]+input[2]
if(sum!==180){
console.log('Error')
}
const set = new Set(input)
if(sum === 180){
if(set.size === 1) console.log('Equilateral')
if(set.size === 2) console.log('Isosceles')
if(set.size === 3) console.log('Scalene')
}
이렇게 작성을 하니까 맞았다
진짜 저 블로그에 작성하신 분은 상당한 고수인 것 같다
조금 더 노력하자!