Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 제네릭
- jQueryUI
- 자바서블릿
- javaservlet
- namedQuery
- 대량쿼리
- JPA
- JQuery
- 스프링데이터흐름
- Generic
- 벌크연산
- springflow
- jQuery값전송
- JPQL
- 프로젝트생성
- 제너릭
- paging
- 페치조인
- 엔티티직접사용
- LIST
- fetchjoin
- values()
- Hibernate
- calendar
- jscalendar
- 페이징
- joinfetch
- jQuery값전달
- fullcalendar
- javascriptcalendar
Archives
- Today
- Total
가자공부하러!
알고리즘(5) - 병합, 스택, 배열 본문
> 배열 A, B에는 정수가 오름차순으로 정렬되어 있다.
> 데이터는 10건 미만이다.
> 배열 A, B에서 0이 들어있는 다음의 요소에는 데이터가 없는 것으로 간주한다.
내 코드(java)
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | package Test.java; import java.util.*; import java.math.*; public class TestMain { public static void main(String[] args) { cl t = new cl(); int i=0,j=0,k=0; int a[]= {2,3,5,8,9,10,12,13,0}; int b[] = {1,3,5,6,0}; int c[] = new int[20]; for(int ii=0; ii<c.length; ii++) { if(a[i]<b[j]) { c[k]=a[i]; i++; if(a[i]==0) { do { c[k]=b[j]; j++; k++; }while(b[j]!=0); c[k]=0; break; } } else if(a[i]==b[j]) { c[k]=a[i]; i++; j++; if(a[i]==0) { do { c[k]=b[j]; j++; k++; }while(b[j]!=0); c[k]=0; break; }else if(b[j]==0) { do { c[k]=a[i]; i++; k++; }while(a[i]!=0); c[k]=0; break; } } else if(a[i]>b[j]){ c[k]=b[j]; j++; if(b[j]==0) { do { c[k]=a[i]; i++; k++; }while(a[i]!=0); c[k]=0; break; } } k++; } t.printArr(c); } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | package Test.java; public class cl { void print() { System.out.println("테스트입니다."); } void printArr(int a[]) { //배열 출력 메소드 System.out.println("배열 출력 시작."); for(int printa =0; printa<a.length;printa++) { System.out.print(a[printa]+" "); } System.out.println(" "); //줄바꿈 } } | cs |
*틀렸던 부분 :
> 중괄호 두번 사용
> 출력부를 for문 안에 포함시켜서 break 때문에 출력부가 보이지 않음
교재 코드(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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | #include <stdio.h> #include <stdlib.h> void BB(b, c); void CC(a, c); void DD(c); int i, j, k; main() { int a[10] = { 2,3,5,8,9,10,12,13,0 }; int b[10] = { 1,3,5,6,0 }; int c[20]; i = 0; j = 0; k = -1; while (1) { k++; if (a[i] < b[j]) { c[k] = a[i]; i++; if (a[i] == 0) BB(b, c); } else if (a[i] == b[j]) { c[k] = a[i]; i++; j++; if (a[i] == 0) BB(b, c); else if (b[j] == 0) CC(a, c); } else { c[k] = b[j]; j++; if (b[j] == 0) CC(a, c); } } } void BB(int b[10], int c[10]) { if (b[j] == 0) DD(c); do { k++; c[k] = b[j]; j++; } while (b[j] != 0); DD(c); } void CC(int a[10], int c[10]) { do { k++; c[k] = a[i]; i++; } while (a[i] != 0); DD(c); } void DD(int c[10]) { k++; c[k] = 0; exit(0); } | cs |
***교재 출판사 홈페이지에서 다운로드 받은 파일 그대로 실행해보았으나 실행안됨
입력값 :
출력값 : 1 2 3 5 8 9 10 12 13 0 0 0 0 0 0 0 0 0 0 0
> 5개의 요소를 갖는 1차원 배열을 스택으로 이용하는 순서도의 코드를 작성.
> 입력되는 데이터가 스택의 크기보다 커지면 "Overflow", 제거할 데이터가 없으면 "Underflow" 출력.
내 코드(java)
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | package Test.java; import java.util.*; import java.math.*; public class TestMain { public static void main(String[] args) { cl t = new cl(); stack s = new stack(); Scanner in = new Scanner(System.in); int p=0,temp=0,i=0; while(i<5){ System.out.print("작업을 선택하세요(push=1/pop=2) : "); p=in.nextInt(); if(p==1) { System.out.print("삽입할 정수를 입력하세요 : "); temp=in.nextInt(); s.push(temp); i++; }else if(p==2){ System.out.print("pop! : "); s.pop(); i--; }else { System.out.println("잘못된 입력입니다.: "); } System.out.println(" "); } s.printStack(); } } class stack{ int stc[]=new int[5]; int pnt=0; void push(int a){ if(pnt>stc.length) { System.out.println("Overflow"); for(int i:stc) System.out.print(stc[i]+" "); }else { stc[pnt]=a; pnt++; } } void pop() { if(pnt<0) { System.out.println("Underflow"); for(int i:stc) System.out.print(stc[i]+" "); }else { System.out.println(pnt+"번 째 값"+stc[pnt-1]+"제거"); stc[pnt]=0; pnt--; } } void printStack() { System.out.println("스택 정보를 출력합니다."); for(int i=0;i<5;i++) System.out.print(stc[i]+" "); } } | cs |
*틀렸던 부분 :
> 23번 줄 pop인데도 입력값을 받게끔 작성 -> 수정
교재 코드(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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | #include "pch.h" #include <iostream> #include <stdio.h> #define _CRT_SECURE_NO_WARNINGS #define MAX 5 int Stack[MAX]; int Top = -1; int push(int ii) { Top++; if (Top >= MAX) { printf("Overflow \n"); Top--; return -1; } Stack[Top] = ii; return 0; } int pop(void) { int r; if (Top < 0) { printf("Underflow \n"); return -1; } r = Stack[Top]; Top--; return r; } int main() { while (1) { int i, j, k; printf("작업을 선택하세요.:"); scanf("%d", &j); if (j == 1) { printf("삽입할 숫자를 입력하세요.:"); scanf("%d", &k); i = push(k); if (i == -1) break; } else if (j == 2) { i = pop(); if (i == -1) break; else printf("제거한 자료는 %d입니다\n", i); } else break; } if (Top < 0) printf("스택에 자료가 없습니다.\n"); else { printf("스택의 자료는 다음과 같습니다.\n"); for (int i = Top; i >= 0; i--) printf("%10d\n", Stack[i]); } } | cs |
내코드 결과
교재 결과
>
내 코드(java)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | package Test.java; public class TestMain { public static void main(String[] args) { int i=0,j=0,cnt=1; int[][] arr = new int[5][5]; for(i=0;i<5;i++) { for(j=0;j<5;j++) arr[i][j]=cnt++; } for(i=0;i<5;i++) { for(j=0;j<5;j++) System.out.print(arr[i][j]+" "); System.out.println(""); } } } | cs |
*틀렸던 부분 :
교재 코드(C)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #include <stdio.h> int main() { int i, j, k; int a[5][5]; k = 0; for (i = 0; i <=4 ; i++) { for (j = 0; j <= 4; j++) { k++; a[i][j] = k; } } for (int x = 0; x <= 4; x++) { for (int y = 0; y <= 4; y++) printf("%3d ", a[x][y]); printf("\n"); } } | cs |
입력값 :
출력값 :
> 5행 5열의 배열에 다음과 같이 기억시키는 순서도를 작성하시오.
>
1 |
|
|
|
|
2 |
3 |
|
|
|
4 |
5 |
6 |
|
|
7 |
8 |
9 |
10 |
|
11 |
12 |
13 |
14 |
15 |
내 코드(java)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | package Test.java; public class TestMain { public static void main(String[] args) { int i=0,j=0,cnt=1; int[][] arr = new int[5][5]; for(i=0;i<5;i++) { for(j=0;j<=i;j++) arr[i][j]=cnt++; } for(i=0;i<5;i++) { for(j=0;j<5;j++) System.out.print(arr[i][j]+" "); System.out.println(""); } } } | cs |
*틀렸던 부분 :
>
교재 코드(C)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #include <stdio.h> int main() { int i, j, k; int a[5][5] = { 0 }; k = 0; for (i = 0; i <=4 ; i++) { for (j = 0; j <= i; j++) { k++; a[i][j] = k; } } for (int x = 0; x <= 4; x++) { for (int y = 0; y <= 4; y++) printf("%3d ", a[x][y]); printf("\n"); } } | cs |
> 5행 5열의 배열에 다음과 같이 기억시키는 코드를 작성.
>
1 | 2 | 3 | 4 | 5 |
10 | 9 | 8 | 7 | 6 |
11 | 12 | 13 | 14 | 15 |
20 | 19 | 18 | 17 | 16 |
21 | 22 | 23 | 24 | 25 |
내 코드(java)
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 | package Test.java; public class TestMain { public static void main(String[] args) { int i=0,j=0,cnt=1; int[][] arr = new int[5][5]; for(i=1;i<=5;i++) { if(i%2 == 0) { //2의 배수인 경우 for(j=4;j>=0;j--) arr[i-1][j]=cnt++; }else { for(j=0;j<5;j++) arr[i-1][j]=cnt++; } } for(i=0;i<5;i++) { for(j=0;j<5;j++) System.out.print(arr[i][j]+" "); System.out.println(""); } } } | cs |
*틀렸던 부분 :
>
교재 코드(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 28 | #include <stdio.h> int main() { int k, L, m, n, i, j, p; int a[5][5] = { 0 }; k = 0; L = 0; m = 4; n = 1; for (i = 0; i <= 4; i++) { for (j = L; j != m + n; j += n) { k++; a[i][j] = k; } p = L; L = m; m = p; n *= -1; } for (int x = 0; x <= 4; x++) { for (int y = 0; y <= 4; y++) printf("%3d", a[x][y]); printf("\n"); } } | cs |
'공부 > 정보처리기사(실기)' 카테고리의 다른 글
알고리즘(7) - 배열응용2, 실무응용 (0) | 2019.04.02 |
---|---|
알고리즘(6) - 배열응용 (0) | 2019.04.02 |
알고리즘(4) - 정렬 (0) | 2019.03.28 |
알고리즘(3) - 배수,보수,그레이코드 등 (0) | 2019.03.28 |
알고리즘(2) - 진법 변환, 최대최소 구하기 (0) | 2019.03.27 |
Comments