코테/백준
[백준] 10448 유레카 이론
Yura 🌼
2024. 10. 27. 17:32
728x90
[Bronze 1] 10448 유레카 이론
구분
알고리즘 > 완전탐색
풀이 요약
세 개의 삼각수 합으로 표현되는 문자임을 알아내기 위해 모든 가능한 조합을 검사해서 각 숫자가 삼각수이면 true, 그렇지 않으면 false를 반환하는 문제
나의 풀이
const [testCase, ...testCaseArr] = require("fs")
.readFileSync("/dev/stdin")
.toString()
.trim()
.split("\\n")
.map(Number);
for (let i = 0; i < testCase; i++) {
console.log(TriangleNum(testCaseArr[i]));
}
function TriangleNum(num) {
for (let i = 1; i < num - 1; i++) {
for (let j = 1; j < num - 1; j++) {
for (let k = 1; k < num - 1; k++) {
if (i + j + k === num && Eureka(i) && Eureka(j) && Eureka(k)) return 1;
}
}
}
return 0;
}
function Eureka(num) {
let sum = 0;
for (let i = 1; i <= num; i++) {
sum += i;
if (sum === num) {
return true;
}
}
return false;
}
삼각수는 각 숫자가 이전 값에 1씩 더해진 합으로 표현됩니다.
예를들면,
- 1=1
- 3=1+2
- 6=1+2+3
- 10=1+2+3+4
Eureka 함수는 숫자 num이 삼각수인지 확인하는 함수입니다.
또 TriangleNum 함수는 i,j,k라는 세 숫자의 조합으로 num이 표현될 수 있는지를 확인하는 함수입니다.
예를 들어 num=7 일때,
i+j+k=1+3+3=7이 되고, 각 숫자가 삼각수인지 Eureka함수로 확인하면 1,3,3 모두 삼각수 이므로 조건을 만족합니다.
이 조건을 만족하면 1을 반환하고 조건을 만족하지 않으면 0을 반환합니다.
배운점
각 테스트케이스에 대해 정확히 한 라인만 출력해야하기 때문에 구조분해 할당(const [testCase, ...testCaseArr])을 적용해서 데이터를 쉽게 받아올 수 있었습니다.
느낀점
브론즈 1 문제임에도 불구하고 시간이 꽤 오래 걸렸던 문제였습니다. 완전 탐색과 이분탐색을 더 공부하여 효율적으로 풀어나가야겠습니다 !
728x90