# 문제 설명
찬우는 오늘 프로그래밍 기초 강의에서 2차원 배열에 대해 배웠다. 너무 재미있던 찬우는 2차원 배열에다 연산을 진행하기로 결심했다.
아래와 같은 두 가지 종류의 연산이 쿼리로 주어진다.
- 0 i j k : 번 행의 번 열의 값을 로 바꾼다.
- 1 i j : 번 행과 번 행을 swap한다.
swap 이란 번 행의 모든 원소와 번 행의 모든 원소를 바꾸는 연산이다.
개의 쿼리를 수행한 후 바뀐 배열의 최종 결과를 출력하시오.
입력
첫째 줄에 행의 개수 ⁶) 과 열의 개수 , 쿼리의 개수 가 주어진다. (1≤N, M≤3000, 1≤q≤10
2번째 줄부터 개의 줄에 걸쳐 행 열의 2차원 배열이 입력으로 주어진다. 배열의 각 원소의 값은 이상 10000 이하의 정수이다.
이후 개 줄에 걸쳐 쿼리가 입력으로 주어진다.
쿼리는 0 i j k 혹은 1 i j의 형태로 주어지며, 쿼리의 첫 번째 값이 0이면 첫 번째 쿼리를, 1이면 두 번째 쿼리를 수행한다.
첫 번째 쿼리의 경우 , , 의 범위는 (0≤i≤N−1, 0≤j≤M−1, 1≤k≤10000)이며 는 정수이다.
두 번째 쿼리의 경우 , 의 범위는 (0≤i, j≤N−1)이다.
출력
개의 쿼리를 전부 수행한 후의 2차원 배열을 출력한다.
# 정답 코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken()); //행의 개수
int M = Integer.parseInt(st.nextToken()); //열의 개수
int q = Integer.parseInt(st.nextToken()); //쿼리의 개수
int[][] table = new int[N][M];
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < M; j++) {
table[i][j] = Integer.parseInt(st.nextToken());
}
}
for (int query = 0; query < q; query++) {
st = new StringTokenizer(br.readLine());
//i번 행의 j번 열의 값을 k로 변경
if (Integer.parseInt(st.nextToken()) == 0) {
int i = Integer.parseInt(st.nextToken());
int j = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
table[i][j] = k;
}
//i번 행과 j번 행을 swap
else {
int i = Integer.parseInt(st.nextToken());
int j = Integer.parseInt(st.nextToken());
int[] swap = table[i];
table[i] = table[j];
table[j] = swap;
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
bw.write(table[i][j] + " ");
}
bw.write("\n");
}
bw.flush();
bw.close();
}
}
시간을 줄이기 위해 입력과 출력에 BufferedReader, BufferedWriter를 사용했다.
BufferedReader로 한 줄을 읽고 StringTokenizer를 이용하여 띄어쓰기마다 나누었다.
행의 개수가 N, 열의 개수가 M인 2차원 배열 table[N][M]를 만든다.
for문을 통해 table에 값을 저장한다.
그다음 q만큼 반복하며 쿼리를 처리한다.
만약 첫번째 숫자가 0이면, i번 행의 j번 열의 값을 k로 변경한다.
첫번째 숫자가 1이면, i번 행과 j번 행을 swap한다.
그 후 BufferedWriter에 배열의 값을 적고 출력하였다.

'백준' 카테고리의 다른 글
[1940] 주몽 (JAVA) (0) | 2024.03.17 |
---|---|
[2018] 수들의 합 5 (JAVA) (1) | 2024.03.17 |
[11660] 구간 합 구하기 5 (JAVA) (4) | 2024.03.14 |
[11659] 구간 합 구하기 4 (JAVA) (0) | 2024.03.14 |
[1546] 평균 (JAVA) (0) | 2024.03.13 |