광규니
광규니네
광규니
전체 방문자
오늘
어제
  • 분류 전체보기 (154)
    • 알고리즘 (100)
      • 알고리즘 개념 (2)
      • 문제 풀이 (96)
    • 주절주절 (19)
      • 자격증, 활동 후기 (4)
      • 전시회 후기 (3)
      • 이모저모 (2)
      • 회고 (3)
      • 뜨럼 (7)
    • 운영체제 (9)
    • 개발 지식 (9)
      • Apple Watch (4)
      • MySQL (2)
      • Eclipse (1)
      • XCode (1)
    • 네트워크 공부 (1)
    • 데이터베이스 공부 (5)
    • Java 공부 (7)
    • TMP (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 구현
  • 합주
  • DP
  • BOJ
  • 애플워치 앱
  • 운영체제
  • 티스토리챌린지
  • 컴퓨터 사이언스
  • 알고리즘
  • BFS
  • OS
  • 자바
  • 프로그래머스
  • 애플워치 앱 만들기
  • 다이나믹 프로그래밍
  • 백준
  • 파이썬
  • 오블완
  • 개념
  • 드린이

최근 댓글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
광규니

광규니네

알고리즘/문제 풀이

[Java/자바 백준 10655] 마라톤 1

2022. 2. 22. 00:27
반응형

풀이

실버 3 문제이지만 체감상 좀 더 어려워서 풀이를 남겨봅니당 !

 

처음 이중 포문으로 브루트포스로 아주 간단히 풀려다가 시간 초과가 났습니다.

 

이후 어떤식으로 풀 수 있을까 생각하다가

모든 체크 포인트를 방문한 값을 distance에 넣어주고

 

체크포인트 한 개를 건너뛰게 되면 줄어드는 거리를 비교해주었습니다.

예를 들어 현재 위치를 i로 예시를 들면

원래라면 i-1, i, i+1값이 있지만

i값을 점프하게되면

i-1, i+1의 위치로 가게 됩니다.

 

이 거리 값을 original과 jump 변수에 각각 넣어주어 최소값을 비교했습니다.

import java.io.*;
import java.util.*;

public class Main {
	static int N;
	static int[][] checkPoint;
	static int distance ;
	static int min = Integer.MAX_VALUE;
	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st ;
		N = Integer.parseInt(br.readLine());
		checkPoint = new int[N][2];
		// 초기값 출발 값 
		for(int i = 0 ; i < N ; i++) {			
			st = new StringTokenizer(br.readLine());
			int x = Integer.parseInt(st.nextToken());
			int y = Integer.parseInt(st.nextToken());
			checkPoint[i][0] = x;
			checkPoint[i][1] = y;
			if(i >= 1) {
				distance += Math.abs(checkPoint[i][0] - checkPoint[i-1][0]) +Math.abs(checkPoint[i][1] - checkPoint[i-1][1]); 
			}
		}
		
		for(int i = 1; i < N-1 ; i++) {
			// jump뛰는 시점 
			int original = Math.abs(checkPoint[i][0]-checkPoint[i-1][0]) 
							+ Math.abs(checkPoint[i][1]-checkPoint[i-1][1])
							+ Math.abs(checkPoint[i][0]-checkPoint[i+1][0]) 
							+ Math.abs(checkPoint[i][1]-checkPoint[i+1][1]);
			int jump = Math.abs(checkPoint[i-1][0] - checkPoint[i+1][0])
						+ Math.abs(checkPoint[i-1][1] - checkPoint[i+1][1]);
			
			min = Math.min(min, distance - original + jump);
		}		
		System.out.println(min);
	}
}
반응형
저작자표시 (새창열림)

'알고리즘 > 문제 풀이' 카테고리의 다른 글

[Java/자바 백준 17281] 공  (0) 2022.02.28
[Java/자바 백준 9466] 텀 프로젝트  (0) 2022.02.23
[Java/자바 백준 17825] 주사위 윷놀이  (0) 2022.02.17
[Java/자바 백준 17822] 원판 돌리기  (0) 2022.02.17
[Java/자바 백준 17135] 캐슬 디펜스  (0) 2022.02.15
    '알고리즘/문제 풀이' 카테고리의 다른 글
    • [Java/자바 백준 17281] 공
    • [Java/자바 백준 9466] 텀 프로젝트
    • [Java/자바 백준 17825] 주사위 윷놀이
    • [Java/자바 백준 17822] 원판 돌리기
    광규니
    광규니
    공부 및 일상 올리기~

    티스토리툴바