✅ 문제
// 1. res/bitmap.txt 파일을 생성하고 다음 데이터를 복사/붙여넣으시오.
11111111110000000000
11111111100000000000
11111111000000000000
11111110000000000000
11111100000000000000
11111000000000000000
11110000000000000000
11100000000000000000
11000000000000000000
10000000000000000000
2. bitmap이라는 이름으로 20X10크기의 정수를 담을 수 있는 이차원 배열을 생성하시오.
[ ] bitmap = [ ];
3. 다음 그림과 같은 모양이 되도록 값의 위치를 변경하시오
00000000001111111111
00000000000111111111
00000000000011111111
00000000000001111111
00000000000000111111
00000000000000011111
00000000000000001111
00000000000000000111
00000000000000000011
00000000000000000001
{
// 코드를 작성하는 공간
System.out.println(“자리변경 완료”);
}
// 4. res/bitmap-out.txt 파일로 bitmap 배열의 값들을 저장
{
// 코드를 작성하는 공간
System.out.println(“저장 완료”);
✅ 해결방법
- bitmap [10][20] 이 있으면 [20]에 해당하는 값들을 좌우 대칭하게 바꿔줘야 한다.
- 좌표로 생각하고 접근하면 편하다!
✅ 코드
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.charset.Charset;
import java.util.Scanner;
//문제 6 : 다음 각 절차를 따라 작성하시오.
//
//// 1. res/bitmap.txt 파일을 생성하고 다음 데이터를 복사/붙여넣으시오.
//
//11111111110000000000
//11111111100000000000
//11111111000000000000
//11111110000000000000
//11111100000000000000
//11111000000000000000
//11110000000000000000
//11100000000000000000
//11000000000000000000
//10000000000000000000
public class Ex_0629_01 {
public static void main(String[] args) throws IOException {
//2. bitmap이라는 이름으로 20X10크기의 정수를 담을 수 있는 이차원 배열을 생성하시오.
// [ ] bitmap = [ ];
int[][] bitmap = new int[10][20];
//파일 읽어오기 & 읽어온 파일 btimap 배열에 하나씩 담기.
{
FileInputStream fis = new FileInputStream("afterschool/res/bitmap.txt");
Scanner fscan = new Scanner(fis);
for (int i = 0; i < bitmap.length; i++) {
String str = fscan.nextLine();
for (int j = 0; j < bitmap[i].length; j++) {
String[] tokens = str.split("");
bitmap[i][j] = Integer.parseInt(tokens[j]);
System.out.print(bitmap[i][j]);
}
System.out.println();
}
//3. 다음 그림과 같은 모양이 되도록 값의 위치를 변경하시오
//00000000001111111111
//00000000000111111111
//00000000000011111111
//00000000000001111111
//00000000000000111111
//00000000000000011111
//00000000000000001111
//00000000000000000111
//00000000000000000011
//00000000000000000001
//값 바꾸기 정렬
//bitmap.length "10", bitmap.length[i][] "20"
for (int i = 0; i < bitmap.length; i++)
for (int j = 0; j < bitmap[i].length/2; j++) {
int temp = bitmap[i][(bitmap[i].length-1) - j];
bitmap[i][(bitmap[i].length-1) - j] = bitmap[i][j];
bitmap[i][j] = temp;
}
//i 0 | 1 | 2 | 3 | ....
//j 0 <-> 19 | 1 <-> 18 | 2 <-> 17 | 3 <-> 16 | ....
}
System.out.println("자리변경 완료");
//i=10 j=20
for (int i = 0; i < bitmap.length; i++) {
for (int j = 0; j < bitmap[i].length; j++) {
System.out.print(bitmap[i][j]);
}
System.out.println();
}
// 4. res/bitmap-out.txt 파일로 bitmap 배열의 값들을 저장
{
FileOutputStream fos = new FileOutputStream("afterschool/res/bitmap_out.txt");
PrintWriter fout = new PrintWriter(fos, true, Charset.forName("UTF-8"));
for (int i = 0; i < bitmap.length; i++) {
for (int j = 0; j < bitmap[i].length; j++) {
fout.print(bitmap[i][j]);
}
fout.println();
}
fout.close();
fos.close();
}
}
}
🔥어려웠던 점🔥
- 아래 좌우 대칭하게 값을 바꾸는 방법을 생각하는데 어려웠었다.
- 데이터의 값의 갯수는 20개이고, 좌우 대칭하게 바꿔주면 10번만 반복하면 된다.
- 두 번째 for문안에 Index를 "나누기 2"를 안해줘서 못하고 있었지만... 옆에 착한 짝꿍 누나가 팁을 줘서 해결!
//값 바꾸기 정렬
//bitmap.length "10", bitmap.length[i][] "20"
for (int i = 0; i < bitmap.length; i++)
for (int j = 0; j < bitmap[i].length/2; j++) {
int temp = bitmap[i][(bitmap[i].length-1) - j];
bitmap[i][(bitmap[i].length-1) - j] = bitmap[i][j];
bitmap[i][j] = temp;
}
//i 0 | 1 | 2 | 3 | ....
//j 0 <-> 19 | 1 <-> 18 | 2 <-> 17 | 3 <-> 16 | ....
'IT > 뚝딱뚝딱' 카테고리의 다른 글
[JAVA] ✏️ 이상한 네모(?) 넣기! (0) | 2023.07.02 |
---|---|
[JAVA] ✏️ 로또 프로그램 만들기! (Top-Down) (0) | 2023.06.29 |
[JAVA] ✏️ 로또 프로그램 만들기! (Bottom-Up) (0) | 2023.06.29 |
[JAVA] ✏️ 오목 게임 프로그램을 만들어보자!(데이터 저장및 불러오기) (0) | 2023.06.26 |
[JAVA] ✏️ 오목 게임 프로그램을 만들어보자!(2차원 배열) (6) | 2023.06.25 |