Recent Posts
Recent Comments
Link
- Today
- Yesterday
- Total
메이쁘
(JAVA) 백준 3023번 : 마술사 이민혁 본문
https://www.acmicpc.net/problem/3023
간단하다.
이중 for문으로 카드 문자 하나씩 받기 전
입력하는 Y, X 크기의 2배 만큼 char 배열을 생성해놓고
카드 문자를 하나씩 받을 때 대칭되는 부분까지 넣어준다.
그래서 2중 for문 하나로 전체 카드를 만들 수 있어야 더욱 빨라진다.
그 후, 에러나는 부분의 문자만 바꿔주면 끝.
** 나는 단순하게 대칭되는 부분씩 바꿨기 때문에 속도가 상대적으로 조금 느리다.
감사합니다.
소스코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
// 마술사 이민혁
// 구현 문제
public class p3023 {
static int cardX, cardY;
static char[][] card;
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int y = Integer.valueOf(st.nextToken());
int x = Integer.valueOf(st.nextToken());
cardX = x * 2;
cardY = y * 2;
card = new char[cardY][cardX];
// 입력 받기
for(int i = 0; i < y; i++) {
String str = br.readLine();
for(int j = 0; j < x; j++) {
card[i][j] = str.charAt(j);
}
}
// 오른쪽 대칭
for(int i = 0; i < y; i++) {
for(int j = 0; j < x; j++) {
int reverseX = cardX - 1 - j;
card[i][reverseX] = card[i][j];
}
}
// 아래 대칭
for(int i = 0; i < y; i++) {
int reverseY = cardY - 1 - i;
for(int j = 0; j < cardX; j++) {
card[reverseY][j] = card[i][j];
}
}
// 에러 수정
st = new StringTokenizer(br.readLine());
int errorX = Integer.valueOf(st.nextToken());
int errorY = Integer.valueOf(st.nextToken());
char ch = card[errorY - 1][errorX - 1];
if(ch == '#') {
card[errorY - 1][errorX - 1] = '.';
}
else {
card[errorY - 1][errorX - 1] = '#';
}
// 결과 출력
for(int i = 0; i < cardY; i++) {
for(int j = 0; j < cardX; j++) {
System.out.print(card[i][j]);
}
System.out.println();
}
}
}
Comments