happy318
팽도리블로그
happy318
전체 방문자
오늘
어제
  • 전체글 (252)
    • 공부 (5)
      • Algorithm 정리 (0)
      • 논문리뷰 (1)
      • C++ (2)
      • Python (2)
      • Java (0)
      • Back-end (0)
      • Front-end (0)
      • Embedded (0)
    • 코딩테스트 (218)
      • Python 문제풀이 (100)
      • C++ 문제풀이 (108)
      • Python template (9)
      • C++ template (1)
    • 일상 (20)
      • 맛집 (13)
      • 쇼핑 (5)
      • 아무 일상 (2)
    • 게임 (9)
      • 메이플스토리 (9)

최근 글

인기 글

hELLO · Designed By 정상우.
happy318

팽도리블로그

코딩테스트/C++ 문제풀이

[백준] 마라톤 1

2022. 12. 1. 14:49

https://www.acmicpc.net/problem/10655

 

10655번: 마라톤 1

젖소 박승원은 2번째 혹은 3번째 체크포인트를 건너뛸 수 있는데, 여기서 두 번째 체크포인트를 건너뛸 경우 경로는 (0,0) -> (11,-1) -> (10,0) 이 되며 거리는 14이다. 박승원은 이것보다 더 짧게 달릴

www.acmicpc.net

우선 문제부터 간단하게 요약하면, 

 

출발지에서 도착지까지 체크포인트를 순서대로 거쳐서 가는데, 한 체크포인트를 건너뛰고 도착지로 갈 때, 최단 경로가 몇이 나오는지를 구해야 합니다.

 

<Solution>

각각의 체크포인트 사이의 구간을 구하고, 한 구간을 건너 뛰었을 때의 구간사이의 거리를 구해서 

 

얼마나 줄어드는지를 계산해서 최대로 줄어드는 경우를 구하는 방식으로 계산하였습니다.

 

실제 구현은 아래와 같습니다.

#include <iostream>
#include <cstdlib>

using namespace std;

#define MAXN ((int)1e5)

int N;
int X[MAXN + 10];
int Y[MAXN + 10];
int dist_1[MAXN + 10];
int dist_2[MAXN + 10];

void InputData(){
    cin >> N;
    for (int i=0; i<N; i++){
        cin >> X[i] >> Y[i];
    }
}

int solution(){
    // 직접 한칸간격 두칸간격 모두 계산
    for(int i =0; i<N-1; i++){
        dist_1[i] = abs(X[i]-X[i+1]) + abs(Y[i]-Y[i+1]);
    }
    for(int i = 0; i<N-2; i++){
        dist_2[i] = abs(X[i]-X[i+2]) + abs(Y[i]- Y[i+2]);
    }

    // total sum dist_1
    int t_s = 0;
    for(int i = 0; i<N-1; i++){
        t_s += dist_1[i];
    }

    int m = -1;
    for(int i = 0; i<N-2; i++){
        m = max(m, dist_1[i] + dist_1[i+1] - dist_2[i]);
    }

    return t_s - m;



}

int main(){
    int ans = -1;

    InputData();

    ans = solution();

    cout << ans << endl;
    return 0;
}
반응형

'코딩테스트 > C++ 문제풀이' 카테고리의 다른 글

[백준] Java vs C++  (0) 2022.12.18
[백준] N과 M (12)  (0) 2022.12.10
[백준] 공주님의 정원  (0) 2022.12.01
[백준] 경비원  (0) 2022.12.01
[백준] Cow Beauty Pageant  (0) 2022.11.30
    '코딩테스트/C++ 문제풀이' 카테고리의 다른 글
    • [백준] Java vs C++
    • [백준] N과 M (12)
    • [백준] 공주님의 정원
    • [백준] 경비원
    happy318
    happy318

    티스토리툴바