You will be fine

<Algorithm> 115. 14890번 경사로

by BFine
반응형

1. 14890번 경사로

  • 시뮬레이션 문제

  • 처음에 풀때 코드가 너무 길어졌다. 다른사람이 숏코딩한걸 봤는데 진짜 너무 감탄했다. 

  • 무턱대고 if else 도배를 하는게 아니라 어떻게 하면 간결하게 표현할 수 있는지를 생각해야 겠다.

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
    static int path;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken());
        int L = Integer.parseInt(st.nextToken());
        path = 0;
        int[][] arr =new int[2*n][n];
        /******************************
         * 시뮬레이션 문제로 경사로가 놓일 수 있는경우
         * 없는경우를 판단하여 경사로의 갯수를 찾는다.
         *******************************/
        for(int i = 0; i < n; i++){
            st = new StringTokenizer(br.readLine());
            for(int j = 0; j < n; j++){
                arr[i][j] = Integer.parseInt(st.nextToken());
            }
        }
        for(int i = 0; i < n; i++){
            for(int j = 0; j < n; j++){
                arr[i+n][j] = arr[j][i]; // 배열의 세로를 가로로 이어붙인다.
            }
        }
 
        for(int i = 0; i < 2*n ; i++){
            int cnt = 1// 경사로를 놓을 수 있는지 없는지 판단변수
            int j = 0;
            for(j = 0; j < n-;j++){
                if(arr[i][j] == arr[i][j+1])
                    cnt++;
                else if(arr[i][j]+== arr[i][j+1&& cnt >= L)
                    cnt = 1// 앞에 있는 벽이 더 클 경우 쌓아온 cnt가 경사로 
                            //  길이보다 같거나 크면 경사로를 놓을 수 있음
                else if(arr[i][j]-== arr[i][j+1&& cnt >=0)
                    cnt = - L; // 앞에 있는 벽이 더 작을 경우 길이만큼 음수로 만든다
                                 // 이때 cnt >=0 하는 이유는 2 1 2 일때 경사로가
                                //길거나 짧아도 놓을 수 없음 
                else break;
            }
            if(j == n-&& cnt >= 0) path++;
        }
        System.out.println(path);
 
    }
}
 
cs



참고 & 출처  


http://www.hellogohn.com/post_one258


반응형

블로그의 정보

57개월 BackEnd

BFine

활동하기