본문 바로가기

CodeUp/Java

[CodeUp_JAVA] 1096 ~ 1099

문제 설명

바둑판(19 * 19)에 n개의 흰 돌을 놓는다고 할 때,
n개의 흰 돌이 놓인 위치를 출력하는 프로그램을 작성해보자.

입력

바둑판에 올려 놓을 흰 돌의 개수(n)가 첫 줄에 입력된다.
둘째 줄 부터 n+1 번째 줄까지 힌 돌을 놓을 좌표(x, y)가 n줄 입력된다.
n은 10이하의 자연수이고 x, y 좌표는 1 ~ 19 까지이며, 같은 좌표는 입력되지 않는다.

출력

흰 돌이 올려진 바둑판의 상황을 출력한다.
흰 돌이 있는 위치는 1, 없는 곳은 0으로 출력한다.

내 풀이

import java.util.Scanner;

public class Main{
	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		int[][] ba = new int[20][20];
		int n = sc.nextInt();

		for(int i = 0; i < n; i++) {
			int x = sc.nextInt();
			int y = sc.nextInt();
			ba[x][y] = 1;
		}

		for (int i = 1; i < ba.length; i++) {
			for (int j = 1; j < ba.length; j++) {
				System.out.print(ba[i][j] + " ");
			}
			System.out.println();
		}

	}
}
 

2차원 배열을 이용한다.



문제 설명

바둑판(19 * 19)에 흰 돌(1) 또는 검정 돌(0)이 모두 꽉 채워져 놓여있을 때,
n개의 좌표를 입력받아 십(+)자 뒤집기한 결과를 출력하는 프로그램을 작성해보자.

입력

바둑알이 깔려 있는 상황이 19 * 19 크기의 정수값으로 입력된다.
십자 뒤집기 횟수(n)가 입력된다.
십자 뒤집기 좌표가 횟수(n) 만큼 입력된다. 단, n은 10이하의 자연수이다.

출력

십자 뒤집기 결과를 출력한다.

내 풀이

import java.util.Scanner;

public class Main{
	public static void main(String[] args) {

    	Scanner sc = new Scanner(System.in);

        int[][] a = new int[19][19];

        // 배열 생성
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a.length; j++) {
                a[i][j] = sc.nextInt();
            }
        }

        int n = sc.nextInt();  // 횟수
        int x, y; // 좌표

        for (int i = 0; i < n; i++) {  // 뒤집은 횟수만큼 반복
            x = sc.nextInt();

            // x
            for (int j = 0; j < a.length; j++) {
                if (a[x - 1][j] == 0) {
                    a[x - 1][j] = 1;
                } else {
                    a[x - 1][j] = 0;
                }
            }

            y = sc.nextInt();

            // y
            for (int k = 0; k < a.length; k++) {
                if (a[k][y - 1] == 0) {
                    a[k][y - 1] = 1;
                } else {
                    a[k][y - 1] = 0;
                }
            }
        }

        // 출력
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a.length; j++) {
                System.out.print(a[i][j] + " ");
            }
            System.out.println();
        }

	 }
}


2차원 배열을 이용한다.


 


문제 설명

격자판의 세로(h), 가로(w), 막대의 개수(n), 각 막대의 길이(l),
막대를 놓는 방향(d:가로는 0, 세로는 1)과
막대를 놓는 막대의 가장 왼쪽 또는 위쪽의 위치(x, y)가 주어질 때,

격자판을 채운 막대의 모양을 출력하는 프로그램을 만들어보자.

입력

첫 줄에 격자판의 세로(h), 가로(w) 가 공백을 두고 입력되고,
두 번째 줄에 놓을 수 있는 막대의 개수(n)
세 번째 줄부터 각 막대의 길이(l), 방향(d), 좌표(x, y)가 입력된다.

입력값의 정의역은 다음과 같다.

1 <= w, h <= 100
1 <= n <= 10
d = 0 or 1
1 <= x <= 100-h
1 <= y <= 100-w

출력

모든 막대를 놓은 격자판의 상태를 출력한다.
막대에 의해 가려진 경우 1, 아닌 경우 0으로 출력한다.
단, 각 숫자는 공백으로 구분하여 출력한다.

내 풀이

import java.util.Scanner;

public class Main{
	public static void main(String[] args) {

    	Scanner sc =  new Scanner(System.in);
    	int l, d, x, y;
    	int h = sc.nextInt();
    	int w = sc.nextInt();
    	int n = sc.nextInt();
    	int[][] a = new int[w][h];
		
    	for (int i = 0; i < n; i++) {
    		l = sc.nextInt();
    		d = sc.nextInt();
    		x = sc.nextInt();
    		y = sc.nextInt();
			
    		if (d == 0) {  // 가로
    			for (int j = y; j < y + l; j++) {
    				a[x - 1][j - 1] = 1;
    			}
    		} else {  // 세로
    			for (int k = x; k < x + l; k++) {
    				a[k - 1][y - 1] = 1;
    			}
    		}
						
    	}
		
    	for (int k = 0; k < w; k++) {
    		for (int k2 = 0; k2 < h; k2++) {
    			System.out.print(a[k][k2] + " ");
    		}
    		System.out.println();
    	}
        
    }
}


문제 설명

미로 상자의 구조가 0(갈 수 있는 곳), 1(벽 또는 장애물)로 주어지고,
먹이가 2로 주어질 때, 성실한 개미의 이동 경로를 예상해보자.

입력

10*10 크기의 미로 상자의 구조와 먹이의 위치가 입력된다.

출력

성실한 개미가 이동한 경로를 9로 표시해 출력한다.

내 풀이

import java.util.Scanner;
 
public class Main{
    public static void main(String args[]){

    	Scanner sc = new Scanner(System.in);
        int[][] a = new int[10][10];

        // 배열 생성
        for (int i = 0; i < 10; i++) {
            for (int j = 0; j < 10; j++) {
                a[i][j] = sc.nextInt();
            }
        }

        boolean check = true;
        int x = 1;
        int y = 1;

        while (check) {
            for (int i = x; i < a.length; i++) {
                for (int j = y; j < a.length; j++) {
                    if (a[i][j] == 0) {
                        a[i][j] = 9;
                        y++;
                    } else if (a[i][j] == 1) {
                        x++;
                        y--;
                        break;
                    } else if (a[i][j] == 2) {
                        a[i][j] = 9;
                        check = false;
                    }
                }
                if (!check) break;
            }
        }

        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a.length; j++) {
                System.out.print(a[i][j] + " ");
            }
            System.out.println();
        }

    }
}

 

'CodeUp > Java' 카테고리의 다른 글

[CodeUp_JAVA] 1091 ~ 1095  (0) 2022.02.11
[CodeUp_JAVA] 1086 ~ 1090  (0) 2022.02.09
[CodeUp_JAVA] 1081 ~ 1085  (0) 2022.02.04
[CodeUp_JAVA] 1076 ~ 1080  (0) 2022.01.20
[CodeUp_JAVA] 1071 ~ 1075  (0) 2022.01.19