문제 : boj25755
필요 알고리즘 개념
- 구현
- 문제에 제시된걸 그대로 구현하는 문제이다.
※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다.
풀이
우선 뒤집는다는 말이 애매할 수 있으므로 그림으로 표현해보면 아래와 같이 이해하면 된다. 저건 L 또는 R로 뒤집는 것이다.
왜 L 또는 R이냐면, 어차피 좌우로 뒤집거나 상하로 뒤집은 결과는 동일하다.
배열을 사용해 표현할 것이므로 arr이라는 n*n 크기의 2차원 배열이 있다고 하자. 이 때 L 또는 R로 뒤집는 경우, 원본이 arr[i][j]라면 해당 값은 뒤집어진 이후 arr[i][n-j-1] 의 위치에 가게 될 것이다 (오른쪽에 있는게 왼쪽으로 가고, 왼쪽에 있는게 오른쪽으로 갈 것이므로). 마찬가지로 이번엔 D 또는 U인 경우엔 상하가 바뀌므로 arr[i][j] -> arr[n-i-1][j] 로 변경될 것이다.
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < n; j++) {
arr[isLR?i:n-i-1][isLR?n-j-1:j] = getReverseChar(st.nextToken().charAt(0));
}
}
그럼 이제 변경되서 들어갈 위치값은 알았으니, 문제에 제시된 대로 문자를 치환해주면 된다.
private char getReverseChar(char c) {
switch (c) {
case '2': return '5'; // 2는 5로
case '5': return '2'; // 5는 2로
case '1': case '8': return c; //1과 8은 그대로
default: return '?'; // 나머지는 ? 이다.
}
}
코드 : github
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
private char getReverseChar(char c) {
switch (c) {
case '2': return '5';
case '5': return '2';
case '1': case '8': return c;
default: return '?';
}
}
private void solution() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
char w = st.nextToken().charAt(0);
int n = Integer.parseInt(st.nextToken());
char[][] arr = new char[n][n];
boolean isLR = w=='L'||w=='R';
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < n; j++) {
arr[isLR?i:n-i-1][isLR?n-j-1:j] = getReverseChar(st.nextToken().charAt(0));
}
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
sb.append(arr[i][j]).append(' ');
}
sb.append('\n');
}
System.out.print(sb);
}
public static void main(String[] args) throws Exception {
new Main().solution();
}
}
'PS > BOJ' 카테고리의 다른 글
[자바] 백준 11068 - 회문인 수 (java) (0) | 2022.10.21 |
---|---|
[자바] 백준 10986 - 나머지 합 (java) (0) | 2022.10.20 |
[자바] 백준 25628 - 햄버거 만들기 (java) (0) | 2022.10.20 |
[자바] 백준 24263 - 알고리즘 수업 - 알고리즘의 수행 시간 2 (java) (0) | 2022.10.20 |
[자바] 백준 2083 - 럭비 클럽 (java) (0) | 2022.10.20 |
댓글