일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 벌크연산
- 페치조인
- calendar
- 프로젝트생성
- jQuery값전달
- Generic
- springflow
- jQuery값전송
- values()
- 스프링데이터흐름
- 페이징
- LIST
- jQueryUI
- paging
- JPQL
- joinfetch
- 대량쿼리
- jscalendar
- Hibernate
- JPA
- fullcalendar
- 엔티티직접사용
- 제네릭
- 제너릭
- 자바서블릿
- JQuery
- javascriptcalendar
- fetchjoin
- namedQuery
- javaservlet
- Today
- Total
가자공부하러!
알고리즘(7) - 배열응용2, 실무응용 본문
목차
> 5행 5열의 배열에 다음과 같이 기억시키는 코드를 작성.
>
1 | 2 | 3 | 4 | 5 |
16 | 17 | 18 | 19 | 6 |
15 | 24 | 25 | 20 | 7 |
14 | 23 | 22 | 21 | 8 |
13 | 12 | 11 | 10 | 9 |
내 코드(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 | package Test.java; public class TestMain { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n=0,i=0,j=-1,k=0,f=5,c=1; //변수 선언 int arr[][]=new int[5][5]; //5*5 배열 선언 do { for(n=0; n<f; n++) { k++; //배열에 직접 저장될 값 k j+=c; //열 지정 변수 arr[i][j]=k; } f--; if(f<0) break; for(n=0; n<f; n++) { k++; i+=c; //행 지정 변수 arr[i][j]=k; } c*=-1; //행-열 순행 역행 결정 }while(f>-2); for(int ii=0; ii<5; ii++) { for(int jj=0;jj<5;jj++) System.out.print(arr[ii][jj]+" "); 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 29 30 31 32 33 34 35 36 | #include <stdio.h> int main() { int k, c, i, j, f, n; int a[5][5] = { 0 }; k = 0; c = 1; i = 0; j = -1; f = 5; while (1) { for (n = 1; n <= f; n++) { k++; j += c; a[i][j] = k; } f--; if (f <= 0) break; for (n = 1; n <= f; n++) { k++; i += c; a[i][j] = k; } c *= -1; } 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 | 4 | 7 | 11 |
3 | 5 | 8 | 12 | 16 |
6 | 9 | 13 | 17 | 20 |
10 | 14 | 18 | 21 | 23 |
15 | 19 | 22 | 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 26 | package java_test; public class test { public static void main(String[] args) { int i=0,j=0,k=0; int a[][] = new int[5][5]; int l=0; //배열에 저장될 정수 for(i=0; i<9; i++) { //행과 열의 합 이용 for(j=0; j<5; j++) { //00->[01->10]->[02->11->20]... k=i-j; //열 위치 지정 변수 if(k<0) continue; if(k>4) continue; a[j][k]=++l; //j행 k열에 저장 } } for(i=0; i<5;i++) { for(j=0;j<5;j++) System.out.print(a[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 | #include <stdio.h> main() { int i, j, k; int a[5][5] = { 0 }; int L = 0; for (i = 0; i <= 8; i++) { for (j = 0; j <= 4; j++) { k = i - j; if (k < 0) continue; if (k > 4) continue; L++; a[j][k] = L; } } for (int x = 0; x <= 4; x++) { for (int y = 0; y <= 4; y++) printf("%3d", a[x][y]); printf("\n"); } } | cs |
> 5행 5열 배열에 가로와 세로의 합이 모두 같은 마방진을 저장하는 코드 작성
>
17 | 24 | 1 | 8 | 15 |
23 | 5 | 7 | 14 | 16 |
4 | 6 | 13 | 20 | 22 |
10 | 12 | 19 | 21 | 3 |
11 | 18 | 25 | 2 | 9 |
내 코드(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 | package java_test; public class test { public static void main(String[] args) { int i=0,j=2,k=0; int a[][] = new int[5][5]; //5*5배열 선언 int l=0; //배열에 저장될 정수 while(l<(5*5)) { //반복횟수 25회 a[i][j]=++l; //arr[0][2]부터 시작 if(l%5 == 0) { i++; //l이 5의 배수이면 행+1 }else { i--; //l이 5의 배수가 아니면 i-- j++ j++; if(i<0) //행이 0보다 작으면 행값을 4로 설정 i=4; if(j>4) //열이 4보다 크면 열값을 0으로 설정 j=0; } } for(i=0; i<5;i++) { for(j=0;j<5;j++) System.out.print(a[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 29 30 31 | #include <stdio.h> main() { int i, j, k, nmg; int a[5][5] = { 0 }; i = 0; j = 5 / 2; for (k = 1; k <= 25; k++) { a[i][j] = k; nmg = k - k / 5 * 5; if (nmg == 0) { i++; continue; } i--; j++; if (i < 0) i = 4; if (j > 4) j = 0; } for (int x = 0; x <= 4; x++) { for (int y = 0; y <= 4; y++) printf("%3d", a[x][y]); printf("\n"); } } | cs |
> 5행 3열 배열의 행과 열을 바꾸어 3행 5열 배열로 변환
내 코드(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 | package java_test; public class test { public static void main(String[] args) { int i=0,j=0,k=0,l=0; int row=5, clm=3; //행과 열 변수 선언 int m=0; //배열에 저장될 숫자 int a[][] = new int[row][clm]; //5행 3열 배열 선언 int b[][]= new int[clm][row]; //3행 5열 배열 선언 for(i=0;i<row;i++) //a배열 초기화 for(j=0;j<clm;j++) a[i][j]=++m; for(i=0; i<row;i++) { //a배열의 행만큼 반복 for(j=0;j<clm;j++) { //a배열의 열만큼 반복 b[k][l]=a[i][j]; l++; if(l >= row) { l=0; k++; } } System.out.println(); } for(i=0;i<row;i++) { //a행렬 출력 for(j=0;j<clm;j++) System.out.print(a[i][j]); System.out.println(); } for(i=0;i<clm;i++) { //b행렬 출력 for(j=0;j<row;j++) System.out.print(b[i][j]); System.out.println(); } } } | cs |
*틀렸던 부분 :
> 20번 줄 b배열에 행 변수 조정 k++를 l++위에 두어서 b배열에 올바른 값이 들어가지 않음 -> k++을 23번줄로 이동
교재 코드(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 | #include <stdio.h> main() { int row, col, i, j, L, m; scanf("%d %d", &row, &col); int a[row][col]; int b[col][row]; int k = 0; for (i = 0; i <= row - 1; i++) { for (j = 0; j <= col - 1; j++) { k++; a[i][j] = k; } } L = 0; m = -1; for (i = 0; i <= row - 1; i++) { for (j = 0; j <= col - 1; j++) { m += 1; b[L][m] = a[i][j]; if (m >= row - 1) { L++; m = -1; } } } for (int x = 0; x < col; x++) { for (int y = 0; y < row; y++) printf("%3d", b[x][y]); printf("\n"); } } | cs |
> 다음 입력 형식과 같이 입력 받은 후 화폐 단위별로 화폐의 매수를 계산하여 출력 형식에 맞게 출력하는 코드 작성.
> 입력 형식 : 이름, 출장비 지급액(이름으로 QUIT가 입력되면 프로그램 종료)
> 출력 형식 : 성명, 출장비 지급액, 오만, 일만, 오천, 일천, 오백, 일백, 오십, 일십, 오, 일
내 코드(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 69 70 71 72 73 74 | package Test.java; import java.util.*; public class TestMain { public static void main(String[] args) { Scanner in = new Scanner(System.in);//스캐너 객체 선언 Person p1 = new Person(); p1.inputData(); p1.printAllEmployeeData(); } } class Person{ Scanner in = new Scanner(System.in);//객체 내 스캐너 객체 선언 private int i=0,j=0,k=0,l=0; private int[] billsAmount = new int[10]; //출장비 단위 별 매수 총 합 저장 배열 private String man[][] = new String[5][2]; //성명과 출장비 저장 배열 void initializePerson() { //객체 내 배열값 초기화 for(String[] ii:man) Arrays.fill(ii,"0"); } void inputData() { //데이터를 입력받기 위한 메소드 initializePerson(); for(i=0;i<5;i++) { System.out.print("성함(QUIT입력시 입력 종료) : "); man[i][j]=in.next(); if(man[i][j].contentEquals("QUIT")) { System.out.println("입력 종료"); man[i][j]="0"; break; } j++; System.out.print("출장비(콤마를 제외한 정수입력) : "); man[i][j]=in.next(); j=0; } } void printAllEmployeeData() { //직원 정보 출력 Arrays.fill(billsAmount, 0); //단위 별 매수 초기화 System.out.println("직원 정보를 출력합니다."); System.out.println("[성함] [출장비] 5만 1만 5천 1천 5백 1백 5십 1십 5 1"); for(i=0;i<5;i++) { for(j=0;j<2;j++) System.out.print(man[i][j]+" "); printPersonalBills(Integer.parseInt(man[i][1])); //단위 별 매수 계산 System.out.println(""); } System.out.print("단위 별 매수 : "); for(k=0;k<10;k++) System.out.print(billsAmount[k]+" "); } void printPersonalBills(int aa) { //개인 별 화폐 매수 출력 메소드 int amount=aa; int billScale=50000; int qtt=0,chc=1; for(int ii=0;ii<10;ii++) { qtt=(amount/billScale); billsAmount[ii]+=qtt; System.out.print(qtt+" "); amount-=(qtt*billScale); if(chc==1) { billScale/=5; chc=0; }else { billScale/=2; chc=1; } } } } | cs |
*틀렸던 부분 :
> 31번 줄 equals를 ==로 잘못 작성
교재 코드(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 | #define _CRT_SECURE_NO_WARNINGS #define LENGTH 10 #include <stdio.h> #include <string.h> struct member { char n[10]; int p, pm[10]; }; main() { FILE *inf; inf = fopen("data1.txt", "r"); struct member data; int tm[10], k, t, m, sw; printf(" \t \t \t \t출장비 지급표\n"); printf("성명 출장비지급액 오만 일만 오천 일천 오백 일백 오십 일십 오 일\n"); for (k = 0; k <= LENGTH - 1; k++) tm[k] = data.pm[k] = 0; fscanf(inf, "%s %d", data.n, &data.p); do { t = data.p; m = 50000; sw = 1; for (k = 0; k <= LENGTH - 1; k++) { data.pm[k] = t / m; t -= data.pm[k] * m; if (sw == 1) { m /= 5; sw = 0; } else { m /= 2; sw = 1; } } printf("%s %d ", data.n, data.p); for (k = 0; k <= LENGTH - 1; k++) { printf("%5d", data.pm[k]); tm[k] += data.pm[k]; } printf("\n"); fscanf(inf, "%s %d", data.n, &data.p); } while (strcmp(data.n, "quit") != 0); printf("전체 화폐 매수 "); for (k = 0; k <= LENGTH - 1; k++) printf("%5d", tm[k]); fclose(inf); } | cs |
'공부 > 정보처리기사(실기)' 카테고리의 다른 글
데이터베이스(1) - 데이터베이스 기본 (0) | 2019.05.25 |
---|---|
알고리즘(8) - 실무응용2 (0) | 2019.04.03 |
알고리즘(6) - 배열응용 (0) | 2019.04.02 |
알고리즘(5) - 병합, 스택, 배열 (0) | 2019.04.02 |
알고리즘(4) - 정렬 (0) | 2019.03.28 |