본문 바로가기
  • ̀⁽ᵕ̈⁾ ́
algorithms

2020.09.27 4주차 백준문제

by j2j2y 2020. 9. 27.

이번주에는 한문제만 해결하였다. 

항상 마감시간에 쫓겨서 직접 제대로 풀지 못했는데 이번 문제는 좀 쉬웠어서 후다닥 풀었다!

 

이번 문제는 "롤 케이크"문제이다. 

www.acmicpc.net/problem/3985

 

3985번: 롤 케이크

첫째 줄에 롤 케이크의 길이 L (1 ≤ L ≤ 1000)이 주어진다. 둘째 줄에는 방청객의 수 N (1 ≤ N ≤ 1000)이 주어진다. 다음 N개 줄에는 각 방청객 i가 종이에 적어낸 수 Pi와 Ki가 주어진다. (1 ≤ Pi ≤ Ki

www.acmicpc.net

<문제 이해>

이번 문제는 사용자에게 전체 롤 케이크 길이 값을 받아오고, 케익을 나누어 먹을 사용자 값을 받아온 후 

첫번째 사용자부터 N번째 사용자까지 순서대로 원하는 만큼의 케익을 얻어가는 문제이다.

사용자에게 먹고싶은 갯수를 범위로 받아와서 원하는 갯수만큼 나누어 줄 수 있는데 단, 이전 사람의 범위와 겹치게 되면

그부분은 얻지 못한다.

 

이렇게 다 나누어준 후, 처음에 받고싶은 케익의 양의 갯수가 가장 큰 사람이랑

다 나누어준 후에 케익을 가장 많이 받은 사람의 값을 출력시키는 것이 이번 문제이다. 

#include <iostream>
#include <vector>

using namespace std;

int cake[1000] = {0,};
int L, N;
int P, K;
int max_val = -1, temp1;
int first_max = -1, temp2;
int max_person;
int first_max_person;


int main(){
    cin >> L;
    cin >> N;
       
    for(int i = 0; i < N; i++){
        cin >> P >> K;
        temp2 = K - P + 1;
        if(temp2 > first_max) {
            first_max = temp2;
            first_max_person = i + 1;
        }
        for(int j = P - 1; j < K; j++){
            if(cake[j] == 0) {
                cake[j] = i+1;
                temp1++;
            }
        }
        if (temp1 > max_val) {
          max_val = temp1; 
          max_person = i + 1;
        }
        temp1 = 0;
    }
    
    cout << first_max_person << '\n';
	cout << max_person << '\n';
}

 

<해결한 후의 소감>

사실 알고리즘을 너무 몰라서 문제 푸는 것에 두려움이 많았는데

이번 문제는 다행히도 너무 쉬운 내용이었기에 자신감이 생겼다.

c++로 코딩테스트를 준비하기 위해 c++로 하는 중인데 나름 c랑 비슷해서 좀더 쉽게 쓸 수 있었던 것 같다.

다음주 문제들은 꼭 미리미리해서 스스로 풀어볼 수 있길 바란다.

 

 

말도 엉망 진창이고 코드도 볼품없지만 이렇게 하나씩 하다보면 늘수있을거라는 기대감을 가지며 오늘도 기록에 남겨본다  

٩꒰。•◡•。꒱۶ 

'algorithms' 카테고리의 다른 글

[level1] 결과 받기  (0) 2022.01.16
2020.07.02 PS 문제 (2)  (0) 2020.07.02
2020.07.02 PS 문제 (1)  (0) 2020.07.02

댓글