본문 바로가기

BAEKJOON/수학

백준 10409번 [서버](C++) -yes6686- 티스토리

728x90
SMALL

백준 문제 풀이: 10409 (서버)


문제 링크: https://www.acmicpc.net/problem/10409

문제 설명:

서버는 최대 T시간 동안 작업을 수행할 수 있습니다. n개의 작업의 수행 시간들이 주어질 때, 최대 몇 개의 작업을 처리할 수 있는지 구하세요. 서버는 작업들을 앞에서부터 순서대로 처리하며, 시간이 초과되면 더 이상 작업을 수행하지 않습니다.


문제 해결 코드


#include <iostream>
using namespace std;

int arr[51]; // 작업 수행 시간을 저장할 배열

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

    int n, T; // n: 작업 개수, T: 서버가 처리할 수 있는 최대 시간
    cin >> n >> T;

    for (int i = 0; i < n; i++) {
        cin >> arr[i]; // 각 작업의 수행 시간 입력
    }

    int s = 0;   // 누적된 작업 시간
    int ans = 0; // 처리된 작업 수

    for (int i = 0; i < n; i++) {
        s += arr[i]; // 작업 시간 누적
        if (s > T) break; // 누적 시간이 최대 시간을 초과하면 중단
        ans++; // 처리된 작업 수 증가
    }

    cout << ans << '\n'; // 최대 처리된 작업 수 출력
    return 0;
}

코드 설명

코드의 주요 로직과 사용된 알고리즘 설명:

  • 입력 처리: - n: 작업의 개수 - T: 서버가 처리할 수 있는 최대 시간 - 각 작업의 수행 시간을 arr에 저장합니다.
  • 시간 누적 계산: - s를 사용해 작업 시간의 합을 누적합니다.
  • 종료 조건: - 누적 시간이 T를 초과하면 루프를 종료합니다.
  • 결과 출력: - ans: 처리된 작업의 수를 출력합니다.

세부 구현:

  • s += arr[i]: 작업 시간 누적
  • if (s > T): 최대 시간을 초과하면 반복문 종료

시간 복잡도 분석

  • 입력 작업의 개수 n에 대해, 배열을 한 번 순회하므로 시간 복잡도는 **O(n)**입니다.

결과

서버가 최대 T시간 동안 처리할 수 있는 작업의 수를 정확히 출력합니다.

  • 입력 예시:
    4 10  
    4 3 2 5
  • 출력 예시:
    3

다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!

728x90
LIST