티스토리 뷰
1) 생각
제목의 부제가 S/W 문제해결 기본 1일차이다. 이름에 알맞게 시간초는 20초 제한을 주고있으며, TestCase도 모두 공개하고 있다.
현재 빌딩에서 조망권이 방해 받을 수 있는 빌딩은 왼쪽으로 2개 오른쪽으로 2개이다. 맨 왼쪽과 맨 오른쪽 2칸은 빌딩이 없다.
따라서 빌딩의 개수 N개에서 4개를 더하여도 되지만 헷갈리니 넉넉히 5개를 더하고 탐색은 Index 2부터 N까지 진행하였다.
2) 방안
현재 빌딩에서 좌로 두개 우로 두개와 크기를 비교하여 만약 현재 빌딩이 크다면(하나라도 현재 빌딩이 작다면 조망권이 좋지 않으므로 다음 빌딩을 탐색한다) 그 차이값을 더하면서 진행하였다.
빌딩 크기의 입력이 한 줄로 들어오고 공백으로 구분지어 지고있다. N의 크기가 최대 1000 이므로 Scanner 보다는 BufferedReader를 사용하여 StringTokenizer로 받아들이는게 시간이 더 빠를것이다.
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 | import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Solution { static int n; public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); for(int i=1;i<=10;i++) { n = Integer.parseInt(br.readLine()); int[] arr = new int[n+5]; StringTokenizer st = new StringTokenizer(br.readLine()); for(int j=2;j<=n;j++) arr[j] = Integer.parseInt(st.nextToken()); System.out.println("#"+i+" "+solve(arr)); } } private static int solve(int[] arr) { int result = 0; for(int i=2;i<=n;i++) { // 좌측 확인 int l1 = arr[i]-arr[i-2]; int l2 = arr[i]-arr[i-1]; // 우측 확인 int r1 = arr[i]-arr[i+1]; int r2 = arr[i]-arr[i+2]; if(l1<0 || l2<0 || r1<0 || r2<0) continue; result += Math.min(l1, Math.min(l2, Math.min(r1, r2))); } return result; } } | cs |
'알고리즘 > SW Expert' 카테고리의 다른 글
[SW Expert] 4751. 다솔이의 다이아몬드 장식 (0) | 2018.08.23 |
---|---|
[SW Expert] 4789. 성공적인 공연 기획 (0) | 2018.08.23 |
[SW Expert] 5162. 두가지 빵의 딜레마 (0) | 2018.08.23 |
[SW Expert] 3143. 가장 빠른 문자열 타이핑 (0) | 2018.08.19 |
[SW Expert] 5215. 햄버거 다이어트 (0) | 2018.08.19 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday