반응형

코드포스(Codeforces) 1511A Review Site 풀이 코드

C | C++ | Java | Python

Difficulty : *800 (Greedy)


문제 해설

당신은 영화제작자이며, 첫 번째 영화를 개봉하고 관람객의 리뷰를 기다리고 있습니다. 서버는 두 개 존재하고 리뷰어는 세 종류가 있습니다. 무조건 추천을 주는 리뷰어(Case 1), 무조건 비추천을 주는 리뷰어(Case 2), 서버에 비추천이 더 많으면 비추천을 주고 그 외에는 무조건 추천을 주는 리뷰어(Case 3)입니다. 우린 리뷰어가 들어갈 서버를 맘대로 고를 수 있습니다. 최고로 얻을 수 있는 추천 수는 몇일까요?

풀이

서버가 두 개 존재하므로 비추천을 주는 리뷰어를 한 곳에, 나머지 두 케이스의 리뷰어를 다른 한 곳에 모는 방법이 최고 평점을 얻는 방법입니다. Case 3의 리뷰어는 추천과 비추천 수가 같을 땐(0 포함) 무조건 추천을 주기 때문입니다. 조건문으로 풀 수 있습니다.

코드

#include <stdio.h>
 
int main () {
	int n = 0, m = 0, i, j, sum = 0, tmp;
	scanf("%d", &n);
 
	for(i = 0; i < n; i++){
		scanf("%d", &m);
		for(j= 0; j< m; j++){
			scanf("%d", &tmp);
			if(tmp == 1 || tmp ==3){
				sum+=1;
			}
		}
		printf("%d\n", sum);
		sum = 0;
	}
	return 0;
}
#include <iostream>
using namespace std;

int main(){
    int n, m, tmp, sum=0;
    cin>>n;
    for(int i = 0; i < n; i++){
        cin>>m;
        for(int j = 0; j < m; j++){
            cin>>tmp;
            if(tmp==1 || tmp==3){
                sum += 1;
            }
        }
        cout<<sum<<endl;
        sum = 0;
    }
    return 0;
}
import java.util.Scanner;

public class Main
{
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int sum = 0;
		
		for(int i = 0; i < n; i++){
		    int m = sc.nextInt();
		    for(int j = 0; j < m; j++){
		        int tmp = sc.nextInt();
		        if(tmp==1 || tmp ==3){
		            sum += 1;
		        }
		    }
		    System.out.println(sum);
		    sum = 0;
		}
	}
}
n = int(input())
sum = 0
for i in range(n):
    m = int(input())
    li = list(map(int, input().split(" ")))
    for j in range(m):
        if li[j]==1 or li[j]==3:
            sum += 1
    print(sum)
    sum = 0

문제 출처

https://codeforces.com/contest/1511/problem/A

반응형

+ Recent posts