https://codeforces.com/contest/1681/problem/A
3솔 했습니다.
A. Game with Cards
각자 카드를 번갈아서 내는데, 방금 상대방이 낸 것보다 숫자가 큰 카드를 내야합니다.
Alice가 먼저 카드를 내면 누가 이기는지, Bob이 먼저 카드를 내면 누가 이기는지 출력해주면 됩니다.
각자 제일 큰 카드의 값이 같다면, 먼저 내는 애가 이기고(더 큰 카드를 낼 수 없으니까)
아니라면 상대방보다 더 큰 카드를 갖고 있는 애가 무조건 이깁니다.
B. Card Trick
카드 뭉치 위에서 b장을 뽑아서 밑으로 내리는 작업을 m번 했을 때, 가장 위에 오는 카드의 번호를 출력하는 문제입니다.
배열로 카드 원소를 각각 입력받고, 밑으로 내리는 카드 b장을 다 더해서 카드의 총 장수로 나머지 연산을 하면 됩니다.
ex) [1,2,3,4,5] 5장이라고 가정, 위에서부터 2, 3, 2개 내리는 작업을 했다면 7 % 5 => 2, arr[2] = 3 이런 식입니다.
#include <stdio.h>
int main() {
int t;
scanf("%d", &t);
int arr[300000] = {}, brr[300000] = {};
while(t--) {
int n, m;
int alice = 0, bob = 0;
scanf("%d", &n);
for(int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
scanf("%d", &m);
int temp, sum = 0;
for(int i = 0; i< m ; i++) {
scanf("%d", &temp);
sum += temp;
while(sum >= n) {
sum -= n;
}
}
printf("%d\n", arr[sum]);
}
}
C. Double Sort
이거는 2행짜리 배열에서 i열, j열을 골라서 값을 바꿀 때,
각 행이 non-decreasing 하게 정렬이 될 수 있는지,
된다면 몇번 바꿔야 하는지, 그리고 그 바꿀 때의 i와 j를 출력해줘야 하고,
못 바꾸거나 바꿔야하는 횟수가 1만회 넘어가면 -1 출력.
이건 그냥 구현입니다.
이중 for문에서
arr[i] > arr[j] && brr[i] < brr[j] 인 경우나
arr[i] < arr[j] && brr[i] > brr[j] 인 경우가 한 개라도 있으면 -1 출력.
아니라면 arr기준으로 먼저 정렬해주고 그 다음에 brr 기준으로 정렬 해줬습니다.
값이 중복될 경우 정렬이 안 될 수 있기에 나눠서 두번 해줬습니다.
ex)
arr [1,1,1,1,1]
brr[5,4,3,2,1] 인 경우 arr만 정렬하거나 혹은 거꾸로인데 brr만 정렬하면 정렬이 안되니까...
'코드포스' 카테고리의 다른 글
Codeforces Round #796 (Div. 2) A, B ,D 풀이 (0) | 2022.06.04 |
---|---|
코드포스 Codeforces Round #794 (Div. 2) A, B, C 풀이 (0) | 2022.05.26 |
코드포스 #793 (Div. 2) (0) | 2022.05.23 |
코드포스 Global Round 20 A, B, C 풀이 (0) | 2022.05.22 |
코드포스 #792 (Div. 1 + Div. 2) A, B 풀이 (0) | 2022.05.20 |