[BOJ_11586 | Array] 지영 공주님의 마법 거울

2019. 1. 7. 11:55Computer Science/Problem Solving (PS)

save image




풀이




실 문제 자체는 굉장히 간단했다.

배열의 크기와 배열의 내용이 주어지면 그 내용을 입력받고

공주님의 심리를 나타내는 control signal의 숫자에 따라 배열의 내용을 뒤바꾸기만 하면 되는 것이다.


문제 해결은 다음과 같이 이루어진다.

1. 주어진 배열을 저장한다. (character Array)

2. 주어진 심리 상태에 따라 배열을 각기 다른 방법으로 출력하면 된다.


심리상태가 1일 경우 입력받은 그대로 출력하면 되고

2일 경우, 열의 번호를 역순으로 출력하면 되고

3일 경우 행의 번호를 역순으로 출력하면 된다.


다만, 메인 함수 자체가 복잡해지는 것을 막기 위해 각각의 기능을 수행하는 static 함수를 새로 구현했고

이 문제 상에서는 출력만 하면 되지만, 

특정한 경우 반전된 데이터를 바탕으로 새로운 기능을 수행하는 경우도 있기 때문에 

새로운 배열을 생성해주었다.


메모리 낭비가 아니냐라고 질문할 수 있겠지만, 어차피

처음 입력받은 배열의 데이터들은 값을 카피할때 한번만 사용되고 

그 후로는 사용되지 않기 때문에 Java Garbage Collector에 의해

자동으로 정리되어 메모리 낭비를 막을 수 있다.



소스 코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import java.util.*;
public class BOJ_11586 {
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        char[][] arr = new char[n][n];
        for(int i=0;i<n;i++){
            String str = input.next();
            for(int j=0;j<str.length();j++){
                arr[i][j] = str.charAt(j);
            }
        }
        int control = input.nextInt();
        arr = reverse(arr, n, control);
        print(arr, n);
    }
    public static void print(char[][] arr, int n){
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                System.out.print(arr[i][j]);
            }System.out.println();
        }
    }
    public static char[][] reverse(char[][] arr, int n, int control){
        if(control == 1return arr;
        char[][] temp = new char[n][n];
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                if(control==2) temp[i][j] = arr[i][n-j-1];
                else if(control==3) temp[i][j] = arr[n-i-1][j];
            }
        }return temp;
    }
}
 
cs


반응형