백준 13305 주유소

2020. 9. 7. 20:04·알고리즘/BOJ

˙www.acmicpc.net/problem/13305

 

13305번: 주유소

표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1

www.acmicpc.net

그리디하게 접근하면 쉽게 풀리는 문제다.

 

내 접근법은 이렇다.

 

1. 현재 지역이 다음 지역보다 가격이 비싸다면 그 다음 지역을 검색해서 현재 지역보다 싼 지역을 찾음

2. 현재 지역보다 싼 지역을 찾았다면 그 지역까지의 거리값만큼 충전 후 이동

3. 이후 반복

 

 

단, 첫 번째 지역에서 반드시 충전해야 한다.

#include <iostream>
using namespace std;
using ll = long long;

ll ar[100001], dist[100000];

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);

	ll n, ans = 0;
	cin >> n;
	for (int i = 0; i < n - 1; i++) cin >> dist[i];
	for (int i = 0; i < n; i++) cin >> ar[i];

	int i = 0, j = 1;
	while (1) {
		if (i == n) break;

		while (ar[i] < ar[j]) j++;
		if (j - i > 1) { //거리의 차가 1이 넘는다면
			ll sum = 0;
			for (int v = i; v < j; v++) {
				sum += dist[v]; //이동해온 거리의 합을 더해주고
			}
			ans += ar[i] * sum; //현재 가격*거리의 합
		}
		else {
			ans += ar[i] * dist[i];
		}
		i = j++;
	}
	cout << ans << endl;

	return 0;
}

계산의 합이 int 형 범위를 초과하는것을 조심해야 한다.

'알고리즘 > BOJ' 카테고리의 다른 글

백준 2331 반복수열  (0) 2020.09.08
백준 10451 순열 사이클  (0) 2020.09.07
백준 2981 검문  (0) 2020.09.07
백준 12865 평범한 배낭  (0) 2020.09.07
백준 19621, 19622 회의실배정 2, 3  (0) 2020.09.06
'알고리즘/BOJ' 카테고리의 다른 글
  • 백준 2331 반복수열
  • 백준 10451 순열 사이클
  • 백준 2981 검문
  • 백준 12865 평범한 배낭
khyu2
khyu2
  • khyu2
    dev log
    khyu2
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 알고리즘
        • BOJ
        • Programmers
        • Algorithm
        • SWEA
      • 개발
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    팰린드롬
    큐
    코딩테스트 연습
    dp
    시뮬레이션
    완전탐색
    GREEDY
    이분 탐색
    트리
    유니온 파인드
    냅색
    프로그래머스
    MST
    dfs
    분할 정복
    구현
    BOJ
    우선순위 큐
    행렬 제곱
    이분탐색
    조합
    알고리즘
    SWEA
    BFS
    피보나치 수
    소수
    다익스트라
    크루스칼
    피사노 주기
    완전 탐색
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
khyu2
백준 13305 주유소
상단으로

티스토리툴바