✅ 문제

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Scanner;

public class Ex_0629_02 {
    public static void main(String[] args) throws IOException {
        //문제 7 : 다음 각 절차를 따라 작성하시오.
        //// 1. res/map.txt 파일을 생성하고 다음 데이터를 복사/붙여넣으시오.
        //
        //00010
        //01010
        //00000
        //// 2. map이라는 이름으로 5x3 크기의 정수를 담을 수 있는 이차원 배열과 board라는 이름의 10X6크기의 문자를 담을 수 있는 이차원 배열을 생성하시오.
        //
        //[           ]  map = [                                      ];
        //[           ]  board = [                                      ];

        int[][] map = new int[3][5];
        char[][] board = new char[6][10];

        {
            FileInputStream fis = new FileInputStream("afterschool/res/map.txt");
            Scanner fscan = new Scanner(fis);

            for (int i = 0; i < map.length; i++) {
                String str = fscan.nextLine();
                for (int j = 0; j < map[i].length; j++) {
                    String[] tokens = str.split("");
                    map[i][j] = Integer.parseInt(tokens[j]);
                }
            }
        }
        System.out.println("map 데이터 로드 완료");
        //// 3. res/map.txt에서 읽은 데이터로 map 배열을 채우시오.
        //
        //{
        //    // 코드를 작성하는 공간
        //
        //    System.out.println(“map 데이터 로드 완료”);
        //}



        //// 4. map 데이터 하나는 board 배열의 4칸과 대응되며 다음과 같은 모양으로 대응된다.
        //// map에서 0은 다음 모양과 같다.
        //// ┌ ┐
        //// └ ┘
        //// map에서 1은 다음 모양과 같다.
        //// ▩▩
        //// ▩▩
        //// map에서 읽은 데이터를 이용해서 board 배열을 채우시오.  다음은 board 배열에 채워진
        //// 모습니다.
        //// ┌ ┐┌ ┐┌ ┐▩▩┌ ┐
        //// └ ┘└ ┘└ ┘▩▩└ ┘
        //// ┌ ┐▩▩┌ ┐▩▩┌ ┐
        //// └ ┘▩▩└ ┘▩▩└ ┘
        //// ┌ ┐┌ ┐┌ ┐┌ ┐┌ ┐
        //// └ ┘└ ┘└ ┘└ ┘└ ┘
        //
        //{
        //     // 코드를 작성하는 공간
        //
        //
        //
        //    System.out.println(“board 그리기 완료”);
        //}

        //보드 윤곽 넣기
        {
            for (int i = 0; i < 6; i++) {
                for (int j = 0; j < 10; j++) {
                    if ((i % 2 == 0))
                        if (j % 2 == 0)
                            board[i][j] = '┌';
                        else
                            board[i][j] = '┐';
                    else if (j % 2 == 0)
                        board[i][j] = '└';
                    else
                        board[i][j] = '┘';
                }
                System.out.println();
            }
        }

        //이상한 네모 입력
        {
            for (int i = 0; i < 3; i++)
                for (int j = 0; j < 5; j++) {
                    if (map[i][j] == 1) {
                        int row = i * 2;
                        int col = j * 2;
                        board[row][col] = '▩';
                        board[row][col + 1] = '▩';
                        board[row + 1][col] = '▩';
                        board[row + 1][col + 1] = '▩';
                    }
                }
        }

        //출력
        {
            for (int i = 0; i < 6; i++) {
                for (int j = 0; j < 10; j++) {

                    System.out.printf("%c", board[i][j]);
                }
                System.out.println();
            }
        }


        //// 5. board 배열을 화면에 출력하는 코드를 작성하시오.
        //
        //{
        //     // 코드를 작성하는 공간
        //
        //
        //
        //    System.out.println(“board 출력 완료”);
        //}
    }
}

✅ 해결방법

  • for문으로 좌표를 뽑아두고 규칙을 찾으면 편하다.


✅ 코드

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Scanner;

public class Ex_0629_02 {
    public static void main(String[] args) throws IOException {
        //문제 7 : 다음 각 절차를 따라 작성하시오.
        //// 1. res/map.txt 파일을 생성하고 다음 데이터를 복사/붙여넣으시오.
        //
        //00010
        //01010
        //00000
        //// 2. map이라는 이름으로 5x3 크기의 정수를 담을 수 있는 이차원 배열과 board라는 이름의 10X6크기의 문자를 담을 수 있는 이차원 배열을 생성하시오.
        //
        //[           ]  map = [                                      ];
        //[           ]  board = [                                      ];

        int[][] map = new int[3][5];
        char[][] board = new char[6][10];

        {
            FileInputStream fis = new FileInputStream("afterschool/res/map.txt");
            Scanner fscan = new Scanner(fis);

            for (int i = 0; i < map.length; i++) {
                String str = fscan.nextLine();
                for (int j = 0; j < map[i].length; j++) {
                    String[] tokens = str.split("");
                    map[i][j] = Integer.parseInt(tokens[j]);
                }
            }
        }
        System.out.println("map 데이터 로드 완료");
        //// 3. res/map.txt에서 읽은 데이터로 map 배열을 채우시오.
        //
        //{
        //    // 코드를 작성하는 공간
        //
        //    System.out.println(“map 데이터 로드 완료”);
        //}



        //// 4. map 데이터 하나는 board 배열의 4칸과 대응되며 다음과 같은 모양으로 대응된다.
        //// map에서 0은 다음 모양과 같다.
        //// ┌ ┐
        //// └ ┘
        //// map에서 1은 다음 모양과 같다.
        //// ▩▩
        //// ▩▩
        //// map에서 읽은 데이터를 이용해서 board 배열을 채우시오.  다음은 board 배열에 채워진
        //// 모습니다.
        //// ┌ ┐┌ ┐┌ ┐▩▩┌ ┐
        //// └ ┘└ ┘└ ┘▩▩└ ┘
        //// ┌ ┐▩▩┌ ┐▩▩┌ ┐
        //// └ ┘▩▩└ ┘▩▩└ ┘
        //// ┌ ┐┌ ┐┌ ┐┌ ┐┌ ┐
        //// └ ┘└ ┘└ ┘└ ┘└ ┘
        //
        //{
        //     // 코드를 작성하는 공간
        //
        //
        //
        //    System.out.println(“board 그리기 완료”);
        //}

        //보드 윤곽 넣기
        {
            for (int i = 0; i < 6; i++) {
                for (int j = 0; j < 10; j++) {
                    if ((i % 2 == 0))
                        if (j % 2 == 0)
                            board[i][j] = '┌';
                        else
                            board[i][j] = '┐';
                    else if (j % 2 == 0)
                        board[i][j] = '└';
                    else
                        board[i][j] = '┘';
                }
                System.out.println();
            }
        }

        //이상한 네모 입력
        {
            for (int i = 0; i < 3; i++)
                for (int j = 0; j < 5; j++) {
                    if (map[i][j] == 1) {
                        int row = i * 2;
                        int col = j * 2;
                        board[row][col] = '▩';
                        board[row][col + 1] = '▩';
                        board[row + 1][col] = '▩';
                        board[row + 1][col + 1] = '▩';
                    }
                }
        }

        //출력
        {
            for (int i = 0; i < 6; i++) {
                for (int j = 0; j < 10; j++) {

                    System.out.printf("%c", board[i][j]);
                }
                System.out.println();
            }
        }


        //// 5. board 배열을 화면에 출력하는 코드를 작성하시오.
        //
        //{
        //     // 코드를 작성하는 공간
        //
        //
        //
        //    System.out.println(“board 출력 완료”);
        //}
    }
}

 


👍좋았던 점👍

  • 연산자, 조건문과 반복문, 배열... 이전에 배운 모든 내용들이 다 들어가 있어서 복습 겸 실력을 다질 수 있어서 좋았음.

🔥어려웠던 점🔥

 

  • 위에 있는 좌표를 (x,y) -> (0, 1) 이런식으로 해석하며 풀어야 하는데....정수 23, 45 이런식으로 생각을 해버려서 Index 규칙찾는게 어려웠다.
  • 배열의 Index는 0부터 시작하는데...나도 모르게 1부터 카운트해서 규칙을 못 찾고 헤메고 있었다.

+ Recent posts