문제 설명
바둑판(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 |