이번주에는 한문제만 해결하였다.
항상 마감시간에 쫓겨서 직접 제대로 풀지 못했는데 이번 문제는 좀 쉬웠어서 후다닥 풀었다!
이번 문제는 "롤 케이크"문제이다.
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 |
댓글