Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 28 |
29 | 30 | 31 |
Tags
- 30일
- 건담 프라모델
- rg
- 쉽게 배우는 운영체제 솔루션
- Gundam
- OS 제작
- 맛집
- 쉽게 배우는 운영체제
- 운영체제 문제 풀이
- 쉽게 배우는 운영체제 풀이
- os 만들기
- 건담 엑스포
- 쉽게 배우는 운영체제 연습문제
- project euler
- OS
- 운영체제 만들기
- OS 구조와 원리
- 맛집 추천
- 운영체제 정리
- Project Euler 해답
- hg
- Project Euler Problem
- 건프라
- 프라모델
- OS강의
- OS 그래픽 처리
- 운영체제
- OS 강의
- 운영체제 제작
- 건담
Archives
- Today
- Total
밤색모자이크의 개발이야기
Project Euler Problem 6 : 1부터 100까지 "제곱의 합"과 "합의 제곱"의 차는? 본문
Algorithm/Project Euler
Project Euler Problem 6 : 1부터 100까지 "제곱의 합"과 "합의 제곱"의 차는?
밤색모자이크 2017. 6. 18. 21:58Project Euler 문제를 해답을 포스팅합니다.
※ 주의 : 최적화는 할 수 있는 만큼했습니다. 따라서 속도면에서는 많이 부족합니다.
문제를 푸는데 목표를 두었고 또한 TDD를 최대한 활용하였습니다.
몇가지 문제의 경우 TDD를 안한 경우도 있습니다.
혹시, 최적화 또는 속도 증가에 대한 부분을 지적해주실 분은 너무나도 감사합니다.
Project Euler Problem 6
1부터 10까지 자연수를 각각 제곱해 더하면 다음과 같습니다 (제곱의 합).
12 + 22 + ... + 102 = 385
1부터 10을 먼저 더한 다음에 그 결과를 제곱하면 다음과 같습니다 (합의 제곱).
(1 + 2 + ... + 10)2 = 552 = 3025
따라서 1부터 10까지 자연수에 대해 "합의 제곱"과 "제곱의 합" 의 차이는 3025 - 385 = 2640 이 됩니다.
그러면 1부터 100까지 자연수에 대해 "합의 제곱"과 "제곱의 합"의 차이는 얼마입니까?
따라서 1부터 10까지 자연수에 대해 "합의 제곱"과 "제곱의 합" 의 차이는 3025 - 385 = 2640 이 됩니다.
그러면 1부터 100까지 자연수에 대해 "합의 제곱"과 "제곱의 합"의 차이는 얼마입니까?
단순하게 풀어서 식을 조금 정리한다면, N * ( 1부터 100의 합 - N) 이고 N은 1~100 입니다. 따라서 이 식을 100까지 연산하여 더하면 최종 값이 출력됩니다.
Source Code
TestClass Code
public class TestClass {
@Test public void resultCheck() { Sum_SquareGap sum_SquareGap = new Sum_SquareGap(10); int result = 0; sum_SquareGap.sum(); for(int i=1; i<=sum_SquareGap.number; i++) { result += i * (sum_SquareGap.sum - i); } assertEquals(2640, result); } @Test public void sumNumbersCheck() { Sum_SquareGap sum_squareGap = new Sum_SquareGap(10); assertEquals(55, sum_squareGap.sum()); } @Test public void mulNumbersCheck() { Sum_SquareGap sum_squareGap = new Sum_SquareGap(10); assertEquals(3628800, sum_squareGap.mul()); } }
Main Class Code
public class Main {
public static void main(String [] args) { Sum_SquareGap sum_SquareGap = new Sum_SquareGap(100); int result = 0; sum_SquareGap.sum(); for(int i=1; i<=sum_SquareGap.number; i++) { result += i * (sum_SquareGap.sum - i); } System.out.println(result); } }
Sum_SquareGap Class Code
public class Sum_SquareGap {
public int number; public int sum; public Sum_SquareGap(int number) { this.number = number; } public int sum() { int result = 0; for(int i=0; i<number; i++) { result += i + 1; } sum = result; return result; } public int mul() { int result = 1; for(int i=0; i<number; i++) { result *= i + 1; } return result; } }
'Algorithm > Project Euler' 카테고리의 다른 글
Project Euler Problem 8 : 1000자리 숫자 안에서 이어지는 5자리 숫자의 곱 중 최대값은? (0) | 2017.06.19 |
---|---|
Project Euler Problem 7 : 10001번째의 소수 (0) | 2017.06.18 |
Project Euler Problem 5 : 1 ~ 20 사이의 어떤 수로도 나누어 떨어지는 가장 작은 수 (0) | 2017.06.18 |
Project Euler Problem 4 : 세자리 수를 곱해 만들 수 있는 가장 큰 대칭수 (0) | 2017.06.18 |
Project Euler Problem 3 : 가장 큰 소인수 구하기 (0) | 2017.06.18 |
Comments