이 문제에서 만족해야 할 a, b, c의 조건은 다음의 세 가지다.
① a, b, c는 a < b < c인 자연수
② a² + b² = c²
③ a + b + c = 1000
내 풀이의 핵심은 조건 ③이다.
c를 우변으로 이항하면 a + b = 1000 - c 임을 이용했다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | package q001_q025; public class Problem009 { public static void main(String[] args) { System.out.println(run()); } public static String run() { int a, b, c; int result = 0; for(a = 1; a <= 332; ++a) { for(b = a + 1; b <= 499; ++b) { c = 1000 - a - b; if(a*a + b*b == c*c) { result = a*b*c; return Integer.toString(result); } } } return Integer.toString(result); } } | cs |
조건 ①에 의해 b = a + 1이 되고,
조건 ①과 ③에 의해 c = 1000 - (a + b) = 1000 - a - b가 된다.
a=332, b=333, c=335일 때 a는 최대값을 갖고
a=1, b=499, c=500일 때 b는 최대값을 갖는다.
따라서 반복문의 조건도 이에 맞춰 설정한다.
'Programming > Solutions' 카테고리의 다른 글
[BAEKJOON] 1193번 (0) | 2019.04.06 |
---|---|
[Project Euler] Problem 010 (0) | 2019.03.31 |
[BAEKJOON] 1011번 (0) | 2019.03.26 |
[Project Euler] Problem 008 (0) | 2019.03.25 |
[BAEKJOON] 1152번 (0) | 2019.03.25 |