알고리즘/C++ 풀이 기록

백준 - 22993 서든어택 3

swanim 2021. 9. 7. 19:29

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

 

22993번: 서든어택 3

좋은 전투 순서가 존재해서 준원이만 생존하고 나머지 플레이어가 모두 죽게 만들 수 있다면 Yes를, 반대로 전투가 어떤 순서로 이루어져도 준원이가 절대 최후의 생존자가 될 수 없다면 No를

www.acmicpc.net

1. 문제 풀이 아이디어

정렬을 이용해서 푸는 것을 핵심으로 하였다. 정렬을 이용하지 않고 푼다고 가정해보자. 준원이의 최초 공격력보다 높은 공격력을 가진 플레이어가 첫 번째 전투 상대라면 준원이가 진다. 준원이가 이길 수 있는 경우의 수를 다 적용하지 않고서 말이다. 그러므로 준원이가 이길 가능성이 높은 상대부터 전투를 하도록 정렬을 이용하였다.  

 

2. 풀이 코드(C++)

#include <iostream>
#include <cstdio>
#include <algorithm>
long long player[100001] = { 0, };
using namespace std;

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

	for (int i = 0; i < n; i++) { //플레이어 공격력 저장
		scanf_s("%lld", &player[i]);
	}
	sort(player + 1, player + n);

	for (int i = 1; i < n; i++) {
		if (player[0] > player[i]) {
			player[0] += player[i];
		}
		else {
			printf("No");
			return 0;
		}
	}
	printf("Yes");
	return 0;
}

3. 문제를 풀면서 배운점

C++에서 정렬을 쉽게 하도록 도와주는 sort()함수에 대해 알게 되었다. 

#include <algorithm>을 해야 sort()함수를 이용할 수 있다. 

sort(player, player + n); 처럼 sort(시작 인자, 마지막 인자); 순으로 넣어줘야 한다. default sort는 오름차순이다. 

'알고리즘 > C++ 풀이 기록' 카테고리의 다른 글

백준 - 1181 단어 정렬  (0) 2021.09.11
백준 - 1026 보물  (0) 2021.09.10
백준 - 1316 그룹 단어 체커  (0) 2021.09.09
백준 - 1158 요세푸스 문제  (0) 2021.09.06
백준 - 1789 수들의 합  (0) 2021.09.06