[Java] 메모리/2차원배열

이유은·2023년 11월 13일
0

[Java]

목록 보기
8/18
post-thumbnail

예제 몇문제 풀고 넘어가자 ~

야구게임

1~9사이의 수 3개를 컴퓨터가 선택하고
사용자가 그 수를 위치까지 정확하게 맞추는 게임
예를들어 4,7,8을 컴퓨터가 선택했다고 가정하면

수를입력 : 123
out

수를입력: 456
1s 0b

수: 567
0s 1b

수를입력: 789
0s 2b

수를입력: 487
1s 2b

수를입력: 478

6번만에 맞추셨습니다.

문자배열로 받아야함 / 문자열로 x

** 컴퓨터 수 생성! 늘 하던대로 매스랜덤 이용

** 중복확인시 , j의 범위를 잘 두는 것이 중요. j는 현재 나온 i까지의 값만 보면 돼서, 범위가 i 까지이다!!

** 다음, 내 수를 입력할 때 배열로 받아두는데, 차형으로 안받은 이유는 컴이 인트 값이라 비교하기 위해 맞춤!!

** 차형으로 받으면 아스키코드로 받으니까, 수치로 받고 0의 아스키코드값이 48이니 -48을 해준다.

** 차례로 숫자를 입력하고 마지막 값인 엔터값도 들어가니까 system.in.skip(5); 로 엔터값 빼주기


메모리 !!

상수및 메소드부 / 힙 /스택/ 레지스트리 가 있는데

레지스트리는 os관리 os콘솔담당 (우리가 다루는 부분이아님)

상수및 메소드 나중에

java는 jvm이 메모리를 관리해준다.

힙 = 동적 메모리 영역 / new : -동적메모리 할당 연산자 / 힙에 데이터를 만들려고 하는거

java의 경우, 힙(=동적메모리)에 데이터를 넣을 때, new 연산자를 사용

자바에서는 뉴라는 말이 없으면 힙에 저장되지않음 그럼 다 어디가? 스택



new가 없으면 힙에 데이터 못씀!!! 이건 꼭 기억하자!


2차원 배열 !!!

int [][] arr = new int[숫자][혹은 동적]; // 이런식으로 표현

예제로 풀어보자 ~

1)

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

를 표현해봐 !!

** 이차원 배열을 만들어 / 행열이 각각 5줄이니 [5][5]로!

** 숫자를 보면 하나씩 증가하고 있으니, 변수 co 를 만들고 시작점을 1로하자!

** 표현은? -> 5개씩 끊어서 하고 있어, 5개가 끝나면 println을 해주자 ~!

2)

21 16 11 6 1

22 17 12 7 2

23 18 13 8 3

24 19 14 9 4

25 20 15 10 5

해보자 !

12345 오른쪽 끝에서부터 희한한 방식 이네 ~ (for문 별찍기 같은 응용!)

** 숫자 생성 -> 위에거랑 똑같이 1-25 까지니 방식 같음.

** 배치를 어떻게 할것인가? - 위에 기본형에서 좌표가 바뀌었으니, 좌표의 규칙을 찾아내자.

** 그리고 arr[j][i] 같이 정확하게 써주면 됨!

3)

25 24 23 22 21

20 19 18 17 16

15 14 13 12 11

10 9 8 7 6

5 4 3 2 1

** 순서만 바뀌고 똑같음~

4)

5 10 15 20 25

4 9 14 19 24

3 8 13 18 23

2 7 12 17 22

1 6 11 16 21

** 얘도 규칙만 찾아내면 ez~


참고) 시간날때 해보자 ~ 위 문제의 응용버전들

예제10번 골뱅이로 돌아가는 숫자

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

public class Exam_10 {

public static void main(String[] args) {

int[][] arr = new int[5][5];

int co = 1;

for(int i=0; i<=4; ++i) arr[0][i] = co++;

for(int i=1; i<=4; ++i) arr[i][4] = co++;

for(int i=3; i>=0; --i) arr[4][i] = co++;

for(int i=3; i>=1; --i) arr[i][0] = co++;

for(int i=1; i<=3; ++i) arr[1][i] = co++;

for(int i=2; i<=3; ++i) arr[i][3] = co++;

for(int i=2; i>=1; --i) arr[3][i] = co++;

for(int i=2; i>=2; --i) arr[i][1] = co++;

for(int i=2; i<=2; ++i) arr[2][i] = co++;

for(int i=0; i<5; ++i) {

for(int j=0; j<5; ++j) {

System.out.print(arr[i][j] + "\t");

}

System.out.println();

}

}

}

//얘를 한번 더 줄인게 11번에 !

public class Exam_11 {

public static void main(String[] args) {

int[][] arr = new int[5][5];

int co = 1;

int t = 4;

for(int k=0; k<=t; ++k) {

for(int i=k; i<=t; ++i) arr[k][i] = co++;

for(int i=k+1; i<=t; ++i) arr[i][t] = co++;

for(int i=t-1; i>=k; --i) arr[t][i] = co++;

for(int i=t-1; i>=k+1; --i) arr[i][k] = co++;

t--;

}

/*

for(int i=0; i<=4; ++i) arr[0][i] = co++;

for(int i=1; i<=4; ++i) arr[i][4] = co++;

for(int i=3; i>=0; --i) arr[4][i] = co++;

for(int i=3; i>=1; --i) arr[i][0] = co++;

for(int i=1; i<=3; ++i) arr[1][i] = co++;

for(int i=2; i<=3; ++i) arr[i][3] = co++;

for(int i=2; i>=1; --i) arr[3][i] = co++;

for(int i=2; i>=2; --i) arr[i][1] = co++;

for(int i=2; i<=2; ++i) arr[2][i] = co++;

*/

for(int i=0; i<5; ++i) {

for(int j=0; j<5; ++j) {

System.out.print(arr[i][j] + "\t");

}

System.out.println();

}

}

}

// 10번과같은데 줄임

=================================

예제 12번

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

5의 마방진

홀수마방진

  1. 시작은 첫째줄 가운데서 시작

  2. 숫자의 움직임은 오른쪽 대각선 위로 이동

  3. 이동한 곳의 행이 음수가 되면 그 열의 최대값(4)으로 이동,

  4. 이동한 곳의 열이 배열의 최대값을 넘어가면 그 행의 0번째로 이동,

  5. 만약 이동한곳에 숫자가 존재하면 움직이기 전 위치로 이동한 후, 한줄내려 다시 시작

public class Exam_12 {

public static void main(String[] args) {

int[][] arr = new int[5][5];

int i = 0; //첫번째줄... i는 줄의 위치를 나타낼 변수

int j = 2; //가운데열... j는 열의 위치를 나타낼 변수

int co = 1; //배열위치에 값을 넣기 위한 변수

while(co<=25) {

arr[i][j] = co;

int oldI = i, oldJ = j;//옮기기 전에 값을 미리 저장을 한다

i--; j++; //2번조건에 의한 식

if (i<0) i=4; //3번조건

if (j>4) j=0; //4번조건

if (arr[i][j] != 0) { //5번조건

i = oldI; i++;

j = oldJ;

}

co++;

}

for(i=0; i<5; ++i) {

for(j=0; j<5; ++j) {

System.out.print(arr[i][j] + "\t");

}

System.out.println();

}

}

}

—다른방식 -

public class Exam_07 {

public static void main(String[] args) {

int[][] arr = new int[5][5];

int i = 0; //첫번째줄... i는 줄의 위치를 나타낼 변수

int j = 2; //가운데열... j는 열의 위치를 나타낼 변수

//int co = 1; //배열위치에 값을 넣기 위한 변수

//while(co<=25) {

for(int co=1; co<=25; ++co) {

arr[i][j] = co;

int oldI = i, oldJ = j;//옮기기 전에 값을 미리 저장을 한다

i--; j++; //2번조건에 의한 식

if (i<0) i=4; //3번조건

if (j>4) j=0; //4번조건

if (arr[i][j] != 0) { //5번조건

i = oldI; i++;

j = oldJ;

}

//co++;

}

for(i=0; i<5; ++i) {

for(j=0; j<5; ++j) {

System.out.print(arr[i][j] + "\t");

}

System.out.println();

}

}

}

—----홀수 마방진 000====

import java.util.*;

public class Exam_121212 {

public static void main(String[] args) {

Scanner in = new Scanner(System.in);

int su;

do {

System.out.print("홀수만 입력 : ");

su = in.nextInt();

}while(su%2 == 0);

int[][] arr = new int[su][su];

int i = 0; //첫번째줄... i는 줄의 위치를 나타낼 변수

int j = su/2; //가운데열... j는 열의 위치를 나타낼 변수

//int co = 1; //배열위치에 값을 넣기 위한 변수

//while(co<=25) {

for(int co=1; co<=su*su; ++co) {

arr[i][j] = co;

int oldI = i, oldJ = j;//옮기기 전에 값을 미리 저장을 한다

i--; j++; //2번조건에 의한 식

if (i<0) i=su-1; //3번조건

if (j>su-1) j=0; //4번조건

if (arr[i][j] != 0) { //5번조건

i = oldI; i++;

j = oldJ;

}

//co++;

}

for(i=0; i<su; ++i) {

for(j=0; j<su; ++j) {

System.out.print(arr[i][j] + "\t");

}

System.out.println();

}

}

}

//홀수마방진

—-------------------------------------------------

예제 13

1 10 11 20 21

2 9 12 19 22

3 8 13 18 23

4 7 14 17 24

5 6 15 16 25

public class Exam_10 {

public static void main(String[] args) {

int[][] arr = new int[5][5];

int co = 1;

for (int i=0; i<=4; ++i) {

if (i%2==0) {

for(int j=0; j<=4; ++j) {

arr[j][i] = co++;

}

}else {

for(int j=4; j>=0; --j) {

arr[j][i] = co++;

}

}

}

for(int i=0; i<5; ++i) {

for(int j=0; j<5; ++j) {

System.out.print(arr[i][j] + "\t");

}

System.out.println();

}

}

}

—----------------------------------------------

14문제

1

2 3 4

5 6 7 8 9

10 11 12

13

—-----------------------------------------------

15문제

1

2 9 8

3 10 13 12 7

4 11 6

5

profile
우당탕코딩

0개의 댓글