2020-09-07
초급 : 17273 카드 공장 (Small) (Bronze II)
from sys import stdin
input = stdin.readline
n, m = input().split()
n = 1
f = True
front, back = map(int, input().split())
for i in range(int(m)):
k = int(input())
if f:
if front <= k:
f = not f
else:
if back <= k:
f = not f
if f: print(front)
else: print(back)
문제에서 주어진대로 구현하면 된다.
중급 : 1213 팰린드롬 만들기 (Silver IV)
from sys import stdin
def input(): return stdin.readline().rstrip()
s = input()
alphabet = [0]*26
for c in s:
alphabet[ord(c) - ord("A")] += 1
oddCnt = 0
for a in alphabet:
if a%2 == 1: oddCnt += 1
if oddCnt > 1:
print("I'm Sorry Hansoo")
else:
r = ""
for i, a in enumerate(alphabet):
for _ in range(a//2): r+=chr(i+65)
if oddCnt == 1:
for i, a in enumerate(alphabet):
if a%2 == 1: r+=chr(i+65)
for i in range(25, -1, -1):
for _ in range(alphabet[i]//2): r+=chr(i+65)
print(r)
모든 알파벳이 짝수개 있다면 반씩 나누어서 출력하면 된다. (aaaabbcc > aabccbaa)
한 알파벳이 홀수개 있는 것이 허용된다.
이 때 역시 모든 알파벳을 반씩 나누어서 출력하면 (정확히는 //2 만큼) 되는데, 정가운데에 홀수개 있는 알파벳을 하나 더해서 출력하면 된다.
처음엔 AAABB 같은 입력에서 BAAAB 를 출력해서 틀렸었다.
고급 : 배틀로얄 (Gold V)
#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> pii;
int X, Y, M, m;
deque<pii> foe;
deque<pii> item;
vector<int> res;
int main() {
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin >> X >> Y >> M;
m = M;
for (int x = 0; x < X; ++x) {
int input; cin >> input;
foe.push_back({ input, x + 1 });
} sort(foe.begin(), foe.end());
for (int y = 0; y < Y; ++y) {
int input; cin >> input;
item.push_back({ input, y + 1 });
} sort(item.begin(), item.end());
while (!foe.empty() || !item.empty()) {
bool gfe = !foe.empty(), gie = !item.empty();
while (!foe.empty() && m > foe.back().first ) {
res.push_back(-1 * foe.back().second);
gfe = true;
m -= foe.back().first; foe.pop_back();
}
while (!item.empty() && (foe.empty() || m <= foe.back().first)) {
res.push_back(item.front().second);
gie = true;
m += item.front().first; item.pop_front();
m = min(m, M);
}
if (!gfe || !gie) break;
}
if (res.size() == X + Y) {
for (int r : res) cout << r << "\n";
}
else cout << 0;
return 0;
}
문제에 "적과 싸웠을 때 잃게 되는 체력은 M / 2 이하고 체력 회복 아이템 역시 밸런스를 위해 최대 M / 2 만큼 회복할 수 있다." 라는 조건이 있으므로 강한 적부터 싸우다가 죽을 것 같으면 비효율적인 회복약부터 먹는 전략이 통한다.
그대로 구현한 다음 어떤 게임이었는지 판정하면 된다.
적이 남았다면 회복약을 아무리 잘 먹어도 적에게 맞아 죽는다는 뜻이다.
댓글