본문 바로가기

BAEKJOON/구현

백준 20299번 [3대 측정](C++) -yes6686- 티스토리

728x90
SMALL

백준 문제 풀이: 20299 [3대 측정]


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

문제 설명:

각 팀의 3대 측정 기록이 주어질 때, 특정 기준을 만족하는 팀의 개수와 해당 팀의 측정 기록을 출력하는 문제입니다. 각 팀의 3대 기록은 세 가지 조건을 만족해야 합니다:

  • 각 팀원의 기록 a, b, c가 최소 l 이상이어야 합니다.
  • 세 팀원의 기록 합계가 최소 k 이상이어야 합니다.

조건을 만족하는 팀의 수와 각 팀의 기록을 순서대로 출력해야 합니다.


문제 해결 코드


// C++로 구현된 코드
#include <iostream>
#include <string>
using namespace std;

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

    int n, k, l;
    cin >> n >> k >> l; // 팀 수(n), 최소 합(k), 개인 최소 점수(l)
    
    int cnt = 0; // 조건을 만족하는 팀 수
    string result = ""; // 조건을 만족하는 팀원의 기록
    
    for (int i = 0; i < n; i++) {
        int a, b, c;
        cin >> a >> b >> c; // 각 팀원의 기록
        if ((a >= l && b >= l && c >= l) && (a + b + c >= k)) {
            cnt++; // 조건을 만족하는 팀 수 증가
            result += to_string(a) + " " + to_string(b) + " " + to_string(c) + " "; // 결과 문자열에 기록 추가
        }
    }

    cout << cnt << '\n'; // 조건을 만족하는 팀 수 출력
    cout << result; // 조건을 만족하는 팀의 기록 출력
    return 0;
}

코드 설명

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

  • 핵심 알고리즘:
    • 모든 팀의 기록을 확인하며 조건을 만족하는지 검증합니다.
    • 조건을 만족하는 팀의 기록은 문자열로 저장하고 팀의 개수를 계산합니다.
  • 구현 세부사항:
    • 입력받은 팀의 기록을 각각 확인하며 조건을 만족하면 결과 문자열에 추가합니다.
    • 개인 점수가 모두 l 이상인지 확인하고, 합계가 k 이상인지를 별도로 확인합니다.
    • 문자열 조작을 통해 조건을 만족하는 팀원의 기록을 저장합니다.
  • 시간 복잡도 분석:
    • 팀의 수가 n일 때, 각 팀의 기록을 확인하는 작업은 O(n)입니다.
    • 각 팀의 기록에 대한 검증과 문자열 조작 작업은 상수 시간에 처리되므로 O(1)입니다.
    • 전체 복잡도는 O(n)입니다.

결과

입력된 팀 중 조건을 만족하는 팀의 수와 각 팀원의 기록을 정확히 출력합니다.

해당 문제에 대한 다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!

728x90
LIST