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 |