일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 제너릭
- paging
- 벌크연산
- javaservlet
- 대량쿼리
- JPA
- 페치조인
- 엔티티직접사용
- springflow
- LIST
- fullcalendar
- jQuery값전송
- jQueryUI
- javascriptcalendar
- values()
- Generic
- 스프링데이터흐름
- jQuery값전달
- 자바서블릿
- namedQuery
- 페이징
- JPQL
- Hibernate
- joinfetch
- jscalendar
- calendar
- 프로젝트생성
- fetchjoin
- JQuery
- 제네릭
- Today
- Total
가자공부하러!
알고리즘(6) - 배열응용 본문
목차
> 5행 5열의 배열에 다음과 같이 기억시키는 코드를 작성.
>
|
| 1 |
|
|
| 2 | 3 | 4 |
|
5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 |
|
|
| 13 |
|
내 코드(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 | package Test.java; public class TestMain { public static void main(String[] args) { int i=0,j=0,cnt=1,s=2,e=2; int[][] arr = new int[5][5]; for(i=0;i<5;i++) { for(j=s;j<=e;j++) arr[i][j]=cnt++; if(i>=2) { s++; e--; }else { s--; e++; } } for(i=0;i<5;i++) { for(j=0;j<5;j++) System.out.print(arr[i][j]+" "); System.out.println(""); } } } | cs |
*틀렸던 부분 :
> 11번 줄 배열 인덱스 잘못입력( arr[i][e] -> arr[i][j])
교재 코드(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 | #include <stdio.h> int main() { int i, j; int a[5][5] = { 0 }; int k = 0; int s = 2, e = 2; for (i = 0; i <= 4; i++) { for (j = s; j <= e; j++) { k++; a[i][j] = k; } if (i >= 2) { s++; e--; } else { s--; e++; } } for (int x = 0; x <= 4; x++) { for (int y = 0; y <= 4; y++) printf("%3d", a[x][y]); printf("\n"); } } | cs |
> 배열의 크기를 입력 받아 배열의 크기에 따라 아래와 같이 기억시키는 코드 작성.
> 단, 배열의 크기는 홀수로만 입력이 가능하다.
>
1 | 2 | 3 | 4 | 5 |
| 6 | 7 | 8 |
|
|
| 9 |
|
|
| 10 | 11 | 12 |
|
13 | 14 | 15 | 16 | 17 |
내 코드(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 | package Test.java; public class TestMain { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n= in.nextInt(); //홀수 정수 입력 int i=0,j=0,cnt=1,s=0,e=n; //초기화 int[][] arr = new int[n][n]; //입력받은 정수 크기의 배열 선언 for(i=0;i<n;i++) { //배열 크기만큼 행 반복 for(j=s;j<e;j++) // arr[i][j]=cnt++; if(i>=(n/2)) { //중간지점 이후에는 시작값-1 종료값+1 s--; e++; }else { //중간지점 전에는 시작값+1 종료값-1 s++; e--; } } for(i=0;i<n;i++) { for(j=0;j<n;j++) System.out.print(arr[i][j]+" "); System.out.println(""); } } } | cs |
*틀렸던 부분 :
> 8번 줄 종료값e를 상수로 선언( e=7 -> e=n)
> 23, 24번 줄 반복조건을 잘못 설정 (j<5 -> j<n)
교재 코드(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 | #include <stdio.h> int main() { int x, m, L, i, j, k; scanf("%d", &x); int a[x][x]; for (i = 0; i < x; i++) for (j = 0; j < x; j++) a[i][j] = 0; k = 0; L = x; m = x / 2; for (i = 0; i <= m; i++) { L--; for (j = i; j <= L; j++) { k++; a[i][j] = k; } } for (i = m + 1; i <= x - 1; i++) { L--; for (j = L; j <= i; j++) { k++; a[i][j] = k; } } for (int y = 0; y < x; y++) { for (int z = 0; z < x; z++) printf("%3d", a[y][z]); printf("\n"); } } | cs |
> 배열의 크기를 입력 받아 배열의 크기에 따라 아래와 같이 기억시키는 코드 작성.
> 단, 배열의 크기는 홀수로만 입력이 가능하다.
>
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 |
내 코드(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 Test.java; public class TestMain { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n= in.nextInt(); //홀수 정수 입력 int i=0,j=0,cnt=1,m=(n/2); //초기화 int[][] arr = new int[n][n]; //입력받은 정수 크기의 배열 선언 for(i=0;i<=m;i++) { //중간까지 행 반복 for(j=0;j< (n-i);j++) arr[i][j]=cnt++; } for(i=m+1; i<n;i++) { //중간부터 행 반복 for(j=0;j<=i;j++) arr[i][j]=cnt++; } for(i=0;i<n;i++) { for(j=0;j<n;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 29 30 | #include <stdio.h> int main() { int x=7, m, k, i, j, L; int a[7][7]; for (i = 0; i < x; i++) for (j = 0; j < x; j++) a[i][j] = 0; k = 0; m = x / 2; for (i = 0; i <= x - 1; i++) { if (i < m) L = x - i; else L = i + 1; for (j = 0; j <= L - 1; j++) { k++; a[i][j] = k; } } for (int y = 0; y < x; y++) { for (int z = 0; z < x; z++) printf("%3d", a[y][z]); printf("\n"); } } | cs |
> 배열의 크기를 입력 받아 배열의 크기에 따라 아래와 같이 기억시키는 코드 작성.
>
|
|
| 10 |
|
| 5 | 11 |
| 2 | 6 | 12 |
1 | 3 | 7 | 13 |
| 4 | 8 | 14 |
|
| 9 | 15 |
|
|
| 16 |
내 코드(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 | package Test.java; public class TestMain { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n=4; int[][] arr = new int[(n*2)-1][n]; //입력받은 정수 크기의 배열 선언 int e=n,s=n,i=0,j=0,cnt=1; for(i=0;i<n;i++) { for(j=s-1;j<=e-1;j++) { arr[j][i]=cnt++; } s--; //시작 인덱스 -1 e++; //끝행 인덱스 +1 } for(i=0;i<(n*2)-1;i++) { for(j=0;j<n;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 col, row, k, j, L, e, i; scanf("%d", &col); row = col * 2 - 1; int a[7][4]; for (i = 0; i < row; i++) for (j = 0; j < col; j++) a[i][j] = 0; k = 0; for (j = 0; j <= col - 1; j++) { L = col - (j + 1); e = (j - 1) + col; for (i = L; i <= e; i++) { k++; a[i][j] = k; } } for (int y = 0; y < row; y++) { for (int z = 0; z < col; z++) printf("%3d", a[y][z]); printf("\n"); } } | cs |
> 2차원 배열 90도 회전
>
1 | 2 | 3 | 4 | 5 |
| 6 | 7 | 8 |
|
|
| 9 |
|
|
| 10 | 11 | 12 |
|
13 | 14 | 15 | 16 | 17 |
13 |
|
|
| 1 |
14 | 10 |
| 6 | 2 |
15 | 11 | 9 | 7 | 3 |
16 | 12 |
| 8 | 4 |
17 |
|
|
| 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 Test.java; public class TestMain { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n= in.nextInt(); //홀수 정수 입력 int i=0,j=0,cnt=1,s=0,e=n; //초기화 int[][] arr = new int[n][n]; //입력받은 정수 크기의 배열 선언 for(i=0;i<n;i++) { //배열 크기만큼 행 반복 for(j=s;j<e;j++) // arr[i][j]=cnt++; if(i>=(n/2)) { //중간지점 이후에는 시작값-1 종료값+1 s--; e++; }else { //중간지점 전에는 시작값+1 종료값-1 s++; e--; } } int[][] arr2=new int[n][n]; //90도 회전한 배열을 저장할 배열 선언 for(i=0;i<n;i++) { //arr의배열크기 -1 -arr의 행 = arr2의 열 = n-1-i for(j=0;j<n;j++) { //arr의 열 = arr2의 행 = j arr2[j][(n-1)-i] = arr[i][j]; } } for(i=0;i<n;i++) { for(j=0;j<n;j++) System.out.print(arr[i][j]+" "); System.out.println(""); } for(i=0;i<n;i++) { for(j=0;j<n;j++) System.out.print(arr2[i][j]+" "); System.out.println(""); } } } | cs |
*틀렸던 부분 :
> 37번 줄 인덱스 순서를 잘못 입력 (arr2[j][i] -> arr2[i][j])
교재 코드(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 | #include <stdio.h> int main() { int i, j, k; int a[5][5] = { 0 }, b[5][5] = { 0 }; k = 0; for (i = 4; i >= 0; i--) { for (j = i; j <= 4; j++) { k++; a[i][j] = k; } } for (i = 0; i <= 4; i++) { for (j = 0; j <= 4; j++) b[j][4 - i] = a[i][j]; } for (int x = 0; x <= 4; x++) { for (int y = 0; y <= 4; y++) printf("%3d", a[x][y]); printf("\n"); } printf("\n"); for (int x = 0; x <= 4; x++) { for (int y = 0; y <= 4; y++) printf("%3d", b[x][y]); printf("\n"); } } | cs |
'공부 > 정보처리기사(실기)' 카테고리의 다른 글
알고리즘(8) - 실무응용2 (0) | 2019.04.03 |
---|---|
알고리즘(7) - 배열응용2, 실무응용 (0) | 2019.04.02 |
알고리즘(5) - 병합, 스택, 배열 (0) | 2019.04.02 |
알고리즘(4) - 정렬 (0) | 2019.03.28 |
알고리즘(3) - 배수,보수,그레이코드 등 (0) | 2019.03.28 |