[C++] [골드 5] 1911번: 흙길 보수하기

2023. 10. 17. 01:25·[게임 개발] 알고리즘 공부/백준

링크

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

 

1911번: 흙길 보수하기

어젯밤 겨울 캠프 장소에서 월드 본원까지 이어지는, 흙으로 된 비밀길 위에 폭우가 내려서 N(1 ≤ N ≤ 10,000)개의 물웅덩이가 생겼다. 월드학원은 물웅덩이를 덮을 수 있는 길이가 L(1 ≤ L ≤ 1,000

www.acmicpc.net

문제

입출력 예제

코드

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

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

    int answer = 0;

    int N; // 웅덩이 개수 
    int L; // 널빤지 길이

    vector<pair<int, int>> pool;

    cin >> N >> L;

    // 웅덩이 만드는 과정
    for (int i = 0; i < N; i++)
    {
        int start, end;
        cin >> start >> end;

        pool.push_back({start, end});
    }

    sort(pool.begin(), pool.end());

    int pos = pool[0].first;
    for (int i = 0; i < pool.size(); i++)
    {
        if (pos > pool[pool.size()-1].second) break;

        // 만약 pos 위치가 구덩이 위치가 아니라면? pos를 구덩이의 처음 위치로 옮겨야지
        if (pos < pool[i].first)
        {
            pos = pool[i].first;
        }

        while (pos < pool[i].second)
        {
            pos += L;
            answer++;
        }
    }

    cout << answer;

    return 0;
}

풀이

폭우가 내려서 N개의 물웅덩이가 생겼다.

물웅덩이를 덮을 수 있는 길이가 L인 널빤지들을 가지고 있다.


물웅덩이들의 위치와 크기에 대한 정보가 주어질 때,
모든 물웅덩이들을 덮기 위해 필요한 널빤지들의 최소 개수를 구하여라.

 

>>

 

구덩이의 위치를 저장하기 위해서 pair형태로 벡터를 선언합니다.

 

이후 현재 널빤지가 막고있는 마지막 위치를 저장할 pos 를 선언합니다.

 

최초의 pos 위치는 처음 물 웅덩이의 시작 지점으로 설정하고,
널빤지의 길이인 L을 pos에 더합니다.

pos가 물 웅덩이를 모두 가리지 않았다면 while문으로 인해 pos에 L길이를 다시 더합니다.

만약 pos가 물 웅덩이의 종료 지점을 지났다면 다음 물 웅덩이의 시작위치를 체크해
pos가 물 웅덩이보다 이전에 있다면 pos를 물 웅덩이의 시작지점으로 옮기고
pos가 물 웅덩이 내부에 있다면 다시 이전의 과정을 반복합니다.

저작자표시 (새창열림)

'[게임 개발] 알고리즘 공부 > 백준' 카테고리의 다른 글

[실버3] [C++] 3273번: 두 수의 합  (0) 2023.11.23
[C++][실버5] 11728번: 배열 합치기  (1) 2023.11.22
[C++] [골드 5] 1092번: 배  (0) 2023.10.16
[C++] [실버 1] 9009번: 피보나치  (1) 2023.10.15
[C++] 16953번: A -> B  (0) 2023.10.15
'[게임 개발] 알고리즘 공부/백준' 카테고리의 다른 글
  • [실버3] [C++] 3273번: 두 수의 합
  • [C++][실버5] 11728번: 배열 합치기
  • [C++] [골드 5] 1092번: 배
  • [C++] [실버 1] 9009번: 피보나치
람팜팜~
람팜팜~
:)
  • 람팜팜~
    RumPumPum
    람팜팜~
  • 전체
    오늘
    어제
    • 전체 (123)
      • 🎵 일상 (2)
      • JAVA (5)
        • 김영한의 자바 입문 (3)
      • JavaScript (12)
      • ---------------------------.. (0)
      • [게임 개발] 포트폴리오 (2)
        • RPG (1)
        • 슈터-플랫포머 (1)
      • [게임 개발] 개발 일지 (28)
        • RPG (25)
        • TopDownProject (3)
      • [게임 개발] 언리얼엔진 공부 (9)
        • 이득우의 언리얼 프로그래밍 Part.1 (6)
        • 이득우의 언리얼 프로그래밍 Part.2 (1)
        • 개인 메모 (2)
      • [게임 개발] 알고리즘 공부 (60)
        • 프로그래머스 (8)
        • 백준 (52)
        • 개인 메모 (0)
      • [게임 개발] CPP 공부 (2)
        • 이것이 C++ 이다 (1)
        • Effective C++ (0)
        • Effective Modern C++ (0)
        • 홍정모 그래픽스 새싹코스 (1)
      • [게임 개발] CS 공부 (3)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      슬라이딩 윈도우
      dp
      스레드
      메모리구조
      프로세스
      투포인터
      context switching
      해시
      역참조
      브루트포스
      데드락
      문자열
      누적합
      그리디
      dfs
      우선순위 큐
      참조자
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    람팜팜~
    [C++] [골드 5] 1911번: 흙길 보수하기
    상단으로

    티스토리툴바