https://codeup.kr/problem.php?id=1097
import java.util.Scanner;
public class Codeup1097_2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[][] arr = new int[19][19];
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
arr[i][j] = sc.nextInt();
}
}
int[][] arr2 = arr;
int n = sc.nextInt();
for (int j = 0; j < n; j++) {
int x = sc.nextInt();
int y = sc.nextInt();
for (int i = 0; i < arr2.length; i++) {
if (arr[x - 1][i] == 1) arr[x - 1][i] = 0; // [10][0~18]
else arr[x - 1][i] = 1;
}
for (int i = 0; i < arr2.length; i++) {
if (arr[i][y - 1] == 1) arr[i][y - 1] = 0; // [0~18][10]
else arr[i][y - 1] = 1;
}
}
for (int i = 0; i < arr2.length; i++) {
for (int j = 0; j < arr2.length; j++) {
System.out.printf("%d ", arr2[i][j]);
}
System.out.println();
}
}
}
오랜만에 다시 풀어봤지만 상당한 시간이 걸렸다. 풀면서 이상했던 점은 x와 y의 위치가 반대로 나오는 것이였는데 위치만 바꾸니 통과했다.
https://codeup.kr/problem.php?id=1098&rid=0
import java.util.Scanner;
public class Codeup1098 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int h = sc.nextInt();
int w = sc.nextInt();
int[][] arr = new int[h][w];
int n = sc.nextInt();
for (int i = 0; i < n; i++) {
int l = sc.nextInt();
int d = sc.nextInt();
int x = sc.nextInt();
int y = sc.nextInt();
for (int j = 0; j < l; j++) {
if (d == 0) arr[x - 1][y - 1 + j] = 1;
}
for (int j = 0; j < l; j++) {
if (d == 1) arr[x - 1 + j][y - 1] = 1;
}
}
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
System.out.printf("%d ", arr[i][j]);
}
System.out.println();
}
}
}
이 문제 3주 전에 도전했다가 실패했는데 드디어 오늘 풀 수 있었다. 저번에는 조건식에서 헤맸었는데 오늘도 그 때처럼 몇 시간을 헤매다가 깊은 명상을 통해 도출해낼 수 있었다.
그러나 문제는 출력에서 익셉션에러가 최종적인 흑막으로 남아있었다. 도저히 이 부분은 혼자 해결할 수 없어서 백엔드 위키를 찾아보았는데
// 수정 전 초기 코드
Scanner sc = new Scanner(System.in);
int[][] arr = new int[sc.nextInt()][sc.nextInt()];
...
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
System.out.printf("%d ", arr[i][j]);
}
System.out.println();
}
첫 번째 문제점은 문제에서 요구하는 n * n
배열의 크기 n
이 서로 같다는 말이 없었기 때문에 행과 열의 크기를 따로 지정했어야 했다.
행 h
와 열 w
를 생성
두 번째 문제점은 출력 반복문의 조건식이 i < h, j < w
가 되어야 한다고 쓰여있었는데 왜 arr.length
가 안되는지 모르겠어서 원기님께 여쭤보았다.
arr.length
가 행의 개수를 의미한다는 것을 이제야 알았다...
지금껏 i
에 넣으면 행이고 j
에 넣으면 열의 개수인줄 알았거늘 기본적인 부분에서 놓치고 있었다.
간단한 질문에도 상세한 답변을 주신 원기님께 감사하다.
주말 간에 1097 ~ 1099 까지는 풀어오는게 회고팀의 숙제여서 오늘 풀어봤는데 하루종일 코딩해도 두 문제밖에 풀지 못했다. 푸는 동안 정말 난 돌대가리인가 하면서 현타에 빠졌었는데 그래도 해결을 하고 나니 한결 나아진 기분이다.
알고리즘은 풀 때마다 이걸 대체 왜 해야하나 하면서 꿍시렁 대긴 하지만 풀어내기만 하면 성장한 듯한 느낌이 드는게 좋은 것 같다. 앞으로 이걸 얼마나 반복해야 할까 해낼 수 있을까 걱정이 많다. 일단 오늘은 여기까지.