-
정보처리기사 알고리즘 초급 완전정복(1부터100까지 곱하기)program_language 및 궁금한것/알고리즘 2019. 3. 9. 17:33
최근 정보처리기사 실기 시험을 위해 알고리즘 공부를 시작했다.
초급편부터 정리해 보도록 하겠다.
풀어나가는 과정은 각기 다를수 있으니 참고만 하면 될것같다. 하지만 결과값은 맞아야 한다.
1 ~100까지의 합계 = 5050
123456789public static void main(String[] args) {int sum = 0;for (int i = 0; i <= 100; i++) {// i=i+1;sum = sum + i;}System.out.println("1부터 100까지 합계" + sum);mod();}cs 1 ~100까지의 짝수의 합계 = 2550
123456789101112public static void mod() {int sum = 0;for (int i = 0; i <= 100; i++) {int r = i % 2;if (r == 0) {sum = sum + i;}}System.out.println("1부터 100까지 짝수 합" + sum);}cs 1~100까지 홀수의 합계 = 2500
123456789101112public void modNum() {int sum = 0;for (int i = 0; i <= 100; i++) {if (i % 2 != 0) {sum = sum + i;}}System.out.println("1부터 100까지 홀수 합" + sum);}cs 1-2+3-4+5-6 .....+99-100 = -50
123456789101112131415public void aa() {int sum1 = 0; // 짝수int sum2 = 0; // 홀수int r = 0;for (int i = 1; i <= 100; i++) {if (i % 2 == 0) {sum1 = sum1 + i;} else {sum2 = sum2 + i;}}r = sum2 - sum1;System.out.println("어려븐것 총합계" + r);}cs 이전문제는 쉽게 풀었지만 이 문제를 마주했을때, 아.. 이게 알고리즘이구나 라는 생각이 들었다.순서도를 보면 다른 방식으로 푸는 사람이 아주 많다. 위에서 말했지만 나는 내 방식대로 알고리즘을 구성했다.내가 풀었던 방법위의 식을 보니 홀수 앞엔 +가 붙고 짝수 앞엔 - 가 붙는다 .그래서 홀수 총합-짝수 총합을 하면 답이 나올거라 생각했다.1+2+4+7+11+16+….+46 = 231
12345678910111213public void bb2() { // 합계 1+2+4+7+11...+46int n = 1;int h = 1;for (int i = 1; i <= 10; i++) {n = n + i;h = h + n;}System.out.println("1+2+4+7+11...+46 = "+h);}cs 이 문제도 어려웠다.. 순서도를 그대로 따라 타이핑 했다.1+3+6+10+15+….열번째항까지 = 220
1234567891011public void cc() {int n = 0;int h = 0;for (int i = 1; i <= 10; i++) {n = n + i;h = h + n;}System.out.println("1+3+6+10+15+….="+h);}cs 이하생략.. ㅎㅎ1x2x3x4x5x….100번째 항까지 곱하기= 933262154439441526816992388562667004907159682643816214685929638952175999932299156089414639761565182862536979208272237582511852109168640000000000000000000000
123456789101112public void mm() { //1x2x3x4x5x…100까지 곱하기BigInteger h = new BigInteger("1");BigInteger b = null;for (int i = 1; i < 100; i++) {b = new BigInteger(String.valueOf(i));h = h.multiply(b);// h = h * i;System.out.println(i+"번째" + h);}System.out.println("1x2x3x4x5x…100까지 곱하기 = " + h);}cs 우와 이건 .. int로 하니 숫자 표현 범위가 적어서 최종값이 0으로 나오기에 BigInteger를 사용했다.
1/2+2/3+3/4+…+49/50 = 45.500794661670554
1234567891011public void modd() { // 1/2+3/4+....49/50double a = 0;System.out.println(1 / 2);for (double i = 1; i < 50; i++) {a = a + i / (i + 1);System.out.println(a);}System.out.println("mod: " + a);}cs 소수이기에 int로 변수 선언시 0으로 출력이 된다.
float이나 double로 선언해야 한다. float은 소수점 길이가 더 짧게 나온다.
1 + 1 + 2 + 3 + 5 + 8 + 13 + ……의 순서로 나열되는 피보나치수열의 10번째 항까지의 합계를 구하는 순서도를 작성하시오(결과값=144)
12345678910111213141516public void fibonacci() { // 피보나치 수열// 1 + 1 + 2 + 3 + 5 + 8 + 13 + ……의 순서로 나열되는 피보나치수열의 10번째 항까지의 합계int fn1 = 1;int fn2 = 1;int fn3 = 0;for (int i = 1; i <= 10; i++) {// sum = (i - 1) + (i - 2);fn3 = fn1 + fn2; // i -1값을 넣어야 함fn1 = fn2;fn2 = fn3;System.out.println("피보나치" + fn3);}System.out.println("피보나치수열합 = " + fn3);}cs 하 피보나치 ㅜㅜ
fn의 n번째 값= fn(n-1번째)+fn(n-2번째)값,
내 짐작인데 위의 이유때문에 fn1,2값도 1로 시작하는것 같다.
위의 식을 쓰려면 fn(n-2번째)값이 존재해야 하니 1이 아닐까..
몇시간을 보다가 반복문 안에 값을 변수안에 담는게 헷갈려서 찾아보다 완성했다.
피보나치의 개념 한번 꼭 읽어보시고 풀어보시길 추천!
ps. 해보다해보다 안되면 정답보는게 난 기억에 더 잘남는다 .. ㅠㅠ
드디어 초급 끝이다!
반응형'program_language 및 궁금한것 > 알고리즘' 카테고리의 다른 글
[알고리즘] 삽입정렬 (0) 2019.10.15 [알고리즘] 버블정렬 (0) 2019.10.15 [알고리즘] 선택정렬 C++, Python (0) 2019.10.15 [알고리즘] Hash , 프로그래머스 초급문제 (0) 2019.09.04 sql문 연습 (0) 2018.08.15