코드 복사/붙여넣기 하는 당신이 아름답습니다.

2456 : 나는 학급회장이다

풀이

완전 쌩노가다 문제!

점수 합이 같은 경우에는 높은 점수의 개수(?)를 비교해야 한다.

점수의 개수를 카운팅하지 말고, 점수를 제곱해서 더해주자!

점수의 개수에 따라 제곱합 값이 달라지기 때문에 점수의 개수가 다르다면 unique함이 보장된다.

잔재주를 조금 부리면 코드 길이를 엄청 줄일 수 있다.

코드

#include <stdio.h>
#include <algorithm>
#define fst first
#define snd second
using namespace std;

int n, f;
pair<int, int> p[3];

int main() {
	scanf("%d", &n);

	for (int i = 0; i < n; i++)
		for (int j = 0, a; j < 3; j++)
			scanf("%d", &a), p[j].fst += a, p[j].snd += a*a;

	n = 0;

	if (p[0] < p[1]) n = 1;
	else if (p[0] == p[1]) f = 1;
	if (p[n] < p[2]) n = 2, f = 0;
	else if (p[n] == p[2]) f = 1;

	printf("%d %d", f ? 0 : n + 1, p[n].fst);

	return 0;
}

아무말

백준, 백준 온라인 저지, BOJ, Baekjoon Online Judge, C, C++, 씨, 씨쁠쁠, JAVA, algorithm, 자바, 알고리즘, 자료구조, 문제, 문제 풀이, 풀이

wookje.kwon's profile image

wookje.kwon

2017-08-20 00:28

Read more posts by this author