30049 c++ - 영업의 신

2024. 11. 24. 19:42🐣/BOJ

더보기

요즘은 백준에서 랜덤 마라톤 문제를 풀고 있습니다. 그중 오늘은 G번 문제인 30049번 문제를 풀도록 하겠습니다.

 

구현 문제입니다.

 

 

시간복잡도를 상수시간에 맞춰서 코드를 작성해야합니다.

 

#include <iostream>

#define FASTIO ios::sync_with_stdio(0), cin.tie(0)

using namespace std;

int marketBestSeller[10000];
int bestSellerCount[300];
int salesTable[10000][300];
int maxSales[10000];

int countBestSeller(int employeeCount, int chargeCount) {
  int count = 0;
  for (int i = 0; i < employeeCount; i++) {
    if (bestSellerCount[i] == chargeCount) {
      count++;
    }
  }
  return count;
}

int main() {
  FASTIO;

  int n, m, k;
  cin >> n >> m >> k;

  for (int i = 0; i < n; i++) {
    for (int j = 0; j < k; j++) {
      int store, sales;
      cin >> store >> sales;
      salesTable[store - 1][i] = sales;
      maxSales[store - 1] = max(maxSales[store - 1], sales);
    }
  }

  for (int i = 0; i < m; i++) {
    if (maxSales[i] == 0) continue;
    for (int j = 0; j < n; j++) {
      if (salesTable[i][j] == maxSales[i]) {
        ++bestSellerCount[j];
        marketBestSeller[i] = j;
        break;
      }
    }
  }

  int tasks;
  cin >> tasks;

  for (int i = 0; i < tasks; i++) {
    int employee, store, sales;
    cin >> employee >> store >> sales;
    store--;
    employee--;

    if (marketBestSeller[store] == employee) {
      salesTable[store][employee] += sales;
      maxSales[store] = salesTable[store][employee];
    } else {
      salesTable[store][employee] += sales;
      if (salesTable[store][employee] > maxSales[store]) {
        maxSales[store] = salesTable[store][employee];
        bestSellerCount[marketBestSeller[store]]--;
        marketBestSeller[store] = employee;
        bestSellerCount[employee]++;
      }
    }

    cout << countBestSeller(n, k) << "\n";
  }

  return 0;
}

 

'🐣 > BOJ' 카테고리의 다른 글

31796 c++ - 한빛미디어 (Easy)  (0) 2024.11.27
21608 c++ - 상어 초등학교  (0) 2024.11.26
20920 c++ - 영단어 암기는 괴로워  (0) 2024.11.23
6987 c++ - 월드컵  (0) 2024.11.20
10827 c++ - a^b  (0) 2024.11.17