티스토리 뷰

swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWDTN0cKr1oDFAWD&categoryId=AWDTN0cKr1oDFAWD&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

풀이

 

1) 현재 지점의 위치 (r1, c1)를 기준으로 잡고 다음 지점의 위치 (r2, c2)로 잡음

2) 현재 지점을 기준으로 다음 지점의 위치는 4가지의 경우가 있다.

2-1) 우하 : r의 차이와 c의 차이중 큰값

2-2) 우상 : r의 차이 + c의 차이

2-3) 좌상 : r의 차이와 c의 차이중 큰값

2-4) 좌하 : r의 차이 + c의 차이

 

주의사항

 

1) >인지 >= 인지 구분

 

package com.SWEA;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.util.Arrays;
import java.util.StringTokenizer;
 
public class SWEA_D4_3349_최솟값으로이동하기 {
	static BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
	static StringTokenizer tokens;
	static int T,W,H,N, arr[][];
	
	public static void main(String[] args) throws NumberFormatException, IOException {
		input = new BufferedReader(new StringReader(src));
		
		T = Integer.parseInt(input.readLine());
		for(int t=1; t<=T; t++) {
			tokens = new StringTokenizer(input.readLine());
			W = Integer.parseInt(tokens.nextToken());
			H = Integer.parseInt(tokens.nextToken());
			N = Integer.parseInt(tokens.nextToken());
			arr = new int[N][2];
			
			for(int n=0; n<N; n++) {
				tokens = new StringTokenizer(input.readLine());
				arr[n][0] = Integer.parseInt(tokens.nextToken());
				arr[n][1] = Integer.parseInt(tokens.nextToken());
			}
			int answer = solve(arr);
//			for(int x[]: arr) {
//				System.out.println(Arrays.toString(x));
//			}
			System.out.println("#"+t+" "+answer);
		}
	}
 
	private static int solve(int[][] arr) {
		int answer = 0;
		for(int i=0; i<arr.length-1; i++) {
			int r1, r2, c1, c2, R, C;
			r1 = arr[i][0];
			c1 = arr[i][1];
			r2 = arr[i+1][0];
			c2 = arr[i+1][1];
			
			R = Math.abs(r2-r1);
			C = Math.abs(c2-c1);
			if(r2 >= r1 && c2 >= c1) {
				answer += Math.max(R, C);
			}
			if(r2 < r1 && c2 > c1) {
				answer += R + C;
			}
			if(r2 <= r1 && c2 <= c1) {
				answer += Math.max(R, C);
			}
			if(r2 > r1 && c2 < c1) {
				answer += R + C;
			}			
		}
		
		return answer;
	}
 
	static String src =
			"1\r\n" + 
			"4 3 3\r\n" + 
			"4 1\r\n"+
			"1 1\r\n" + 
			"3 3\r\n" + 
			"";
}

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함