본문 바로가기
PS/BOJ

[백준] 2876. 그래픽스 퀴즈(c++)

by backend 개발자 지망생 2024. 4. 24.

 

https://www.acmicpc.net/problem/2876

 

2876번: 그래픽스 퀴즈

오늘은 기초컴퓨터그래픽스의 퀴즈가 있는 날이다. 기다란 교실 안에는 N개의 책상이 한 줄로 늘어서 있는데, 각 책상당 두 명의 학생이 앉도록 되어있다. 모든 학생들은 그래픽스를  열심히 

www.acmicpc.net

 

문제를 이해하는데 꽤나 어려움이 있었다.

또한 dp로 풀 수 있는 생각이 잘 들지 않아서 블로그를 참조했다.

 

문제 이해 & 풀이 방식에 대한 설명이 나와있다. 다만 예전 채점방식으로 한 틀린 알고리즘이라 몇 줄 추가해야 한다.

https://bconfiden2.tistory.com/290

 

[백준] 2876 : 그래픽스 퀴즈

https://www.acmicpc.net/problem/2876 2876번: 그래픽스 퀴즈 오늘은 기초컴퓨터그래픽스의 퀴즈가 있는 날이다. 기다란 교실 안에는 N개의 책상이 한 줄로 늘어서 있는데, 각 책상당 두 명의 학생이 앉도록

bconfiden2.tistory.com

 


#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
#include <map>
#include <queue>
#include <string>
#include <cstring>
using namespace std;

using ll = long long;

int t, a, b;
int grades[100001][6] = { 0, }; // grade 저장용
int maxval = 0, minidx = 6; //횟수, 그레이드


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

	cin >> t;

	for (int i = 1; i <= t; i++) {
		cin >> a >> b;
		grades[i][a] = grades[i - 1][a] + 1; //이전 책상까찌의 값 + 1
		if (grades[i][a] > maxval) { //최댓값 갱신
			maxval = grades[i][a];
			minidx = a;
		}
		else if (grades[i][a] == maxval && minidx > a) { //횟수가 같으면서 그레이드가 낮은 경우
			maxval = grades[i][a];
			minidx = a;
		}
		if (a != b) { //a와 b가 같지 않을 때 b 판별
			grades[i][b] = grades[i - 1][b] + 1; //이전 책상까지의 값 + 1
			if (grades[i][b] > maxval) { //최댓값 갱신
				maxval = grades[i][b];
				minidx = b;
			}
			else if (grades[i][b] == maxval && minidx > b) { //횟수 같으면서 그레이드 낮은 경우
				maxval = grades[i][b];
				minidx = b;
			}
		}
	}

	cout << maxval << " " << minidx << '\n';
	
	return 0;
}

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

[백준] 2559. 수열(c++)  (1) 2024.04.28
[백준] 15721. 번데기(c++)  (0) 2024.04.27
[백준] 5883. 아이폰 9S(c++)  (0) 2024.04.26
[백준] 15993. 1, 2, 3 더하기 8(c++)  (1) 2024.04.26
[백준] 10798. 세로읽기(c++)  (0) 2024.04.25