<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-1 ;j++){ if(arr[i][j] == arr[i][j+1]) cnt++; else if(arr[i][j]+1 == arr[i][j+1] && cnt >= L) cnt = 1; // 앞에 있는 벽이 더 클 경우 쌓아온 cnt가 경사로 // 길이보다 같거나 크면 경사로를 놓을 수 있음 else if(arr[i][j]-1 == arr[i][j+1] && cnt >=0) cnt = 1 - L; // 앞에 있는 벽이 더 작을 경우 길이만큼 음수로 만든다 // 이때 cnt >=0 하는 이유는 2 1 2 일때 경사로가 //길거나 짧아도 놓을 수 없음 else break; } if(j == n-1 && cnt >= 0) path++; } System.out.println(path); } } | cs |
참고 & 출처
http://www.hellogohn.com/post_one258
반응형
'공부(2018~2019) - 스킨변경전 > Algorithm' 카테고리의 다른 글
<Algorithm> 117. 중위순회(SWExpert) (0) | 2019.02.17 |
---|---|
<Algorithm> 116. 보호필름(SWExpert) (0) | 2019.02.16 |
<Algorithm> 114. 2293번 동전1 (0) | 2019.02.15 |
<Algorithm> 113. 1149번 RGB거리 (0) | 2019.02.15 |
<Algorithm> 112. 프로세서(SWExpert) (0) | 2019.02.15 |
블로그의 정보
57개월 BackEnd
BFine