max_count) { max_count = count; majority = soldiers[i - 1]; } co"> max_count) { max_count = count; majority = soldiers[i - 1]; } co"> max_count) { max_count = count; majority = soldiers[i - 1]; } co">
<aside> 1️⃣
1270번 전쟁 - 땅따먹기
번호의 군대가 있을 때 한 군대의 병사가 절반을 초과하면 지배하게 됨.
각 땅들을 지배한 군대의 번호 출력하기
</aside>
#include <stdio.h>
#include <stdlib.h>
int compare(const void *a, const void *b) {
long long x = *(long long*)a;
long long y = *(long long*)b;
if (x > y) return 1;
else if (x < y) return -1;
else return 0;
}
//군대의 병사가 절반을 초과한다면 그 땅은 그 번호의 군대의 지배하에
int main() {
int n; //땅 개수
scanf("%d", &n);
while (n--) {
int T; //각 땅마다 병사 번호
scanf("%d", &T);
long long soldiers[100000];
for (int i = 0; i < T; i++) {
scanf("%lld", &soldiers[i]);
}
//정렬 후 가장 긴 연속된 구간 찾기
qsort(soldiers, T, sizeof(long long), compare);
int max_count = 1;
int count = 1;
long long majority = soldiers[0];
for (int i = 1; i < T; i++) {
if (soldiers[i] == soldiers[i - 1]) {
count++;
} else {
if (count > max_count) {
max_count = count;
majority = soldiers[i - 1];
}
count = 1;
}
}
//마지막 구간 처리
if (count > max_count) {
max_count = count;
majority = soldiers[T - 1];
}
if (max_count > T / 2)
printf("%lld\\n", majority);
else
printf("SYJKGW\\n");
}
return 0;
}

채점이 엄청 오래걸렸다..
<aside> 2️⃣
1459번 걷기
학교에서 집으로 갈 때 도시의 세로 도로는 모든 정수 x좌표마다 있고, 가로 도로는 모든 정수 y좌표마다 있음
(0, 0)에서 출발해 가로나 세소소 한 블록씩 움직일 때 집으로 가는 최소시간 구하기
</aside>
#include <stdio.h>
#define ll long long
int main() {
ll X, Y, W, S;
scanf("%lld %lld %lld %lld", &X, &Y, &W, &S);
//X, Y 중 작은 쪽만큼은 대각선으로 갈 수 있음
ll minXY = (X < Y) ? X : Y;
ll maxXY = (X > Y) ? X : Y;
ll result = 0;
if (S >= 2 * W) {
//대각선이 비효율적 -> 전부 직선으로 이동
result = (X + Y) * W;
}
else if (S >= W) {
//대각선이 한 번의 직선보다 싸거나 같고, 두 번보단 비싸지 않음
result = minXY * S + (maxXY - minXY) * W;
}
else {
//대각선이 가장 효율적일 때
ll diff = maxXY - minXY;
//짝수면 전부 대각선으로 이동 가능, 홀수면 마지막 한 칸 직선
if (diff % 2 == 0)
result = maxXY * S;
else
result = (maxXY - 1) * S + W;
}
printf("%lld\\n", result);
return 0;
}
