대회 날짜 : 2024년 2월 17일
문제 수 : 8문제
등수 : 115/314
BOJ 31408번. 당직 근무표 Bronze |
시간 제한 0.5초 / 메모리 제한 1024 MB
중대장 만식이의 부대는 당직 근무표를 만들어 당직 근무 스케줄을 관리한다. 당직 근무표에는 총 N일의 당직 근무 스케줄이 작성되어 있으며, 각 날짜에 한 명씩 당직을 서는 병사의 번호가 작성되어 있다. 당직 근무 이후에는 병사에게 충분한 휴식을 제공해야 하므로, 이틀 연속으로 당직 근무를 서는 것은 엄격히 금지된다.
만식이는 금지 사항을 위반하지 않기 위해, 병사들의 당직 근무 순서를 원하는 만큼 맞바꿔 당직 근무표를 개선하고자 한다. 동일한 병사가 이틀 연속으로 당직을 서지 않도록 당직 근무표를 개선할 수 있는지 확인해 주자.
나의 코드
#include <iostream>
#define MAX 100000
using namespace std;
int main(){
int A[MAX+1]={};
int n,mindex=0;
cin >> n;
for (int i=1;i<=n;i++){
int a;
cin >> a;
A[a]++;
if (A[mindex]<A[a]){
mindex=a;
}
}
if (n/2+n%2<A[mindex]) cout << "NO";
else cout << "YES";
return 0;
}
이 문제는 같은 사람이 2번 이상 배치가 되는지를 검사하는 문제다. N번 입력을 받아서 A배열의 입력값 인덱스에 더하고 그 입력값의 최대인 배열의 인덱스를 mindex변수에 저장하고 만약 mindex의 값이 n/2+n%2보다 크다면 NO를 아니라면 YES를 출력한다. n/2+n%2는 n이 짝수라면 최대 n/2까지 가능하고 n이 홀수라면 n/2+1만큼 가능하므로 n/2+n%2를 사용했다.
BOJ 31409번. 착신 전환 소동 Silver |||
시간 제한 1초 / 메모리 제한 1024 MB
도훈이네 부대의 전화기에는 착신 전환이라는 기능이 있다. 착신 전환이란 전화기에 걸려 오는 전화를 다른 전화기로 대신 연결하는 기능이다. 가령, 전화기 가 전화기 로 착신 전환을 했다면, 누군가가 전화기 에 전화를 걸었을 때 전화기 에 전화가 걸려 오게 된다. 착신 전환은 전화기마다 최대 하나의 전화기로만 설정할 수 있다.
그러나 해당 기능에는 큰 문제가 있는데, 착신 전환이 꼬이게 되면 일부 전화기가 먹통이 된다는 것이다! 예를 들어, 전화기 가 전화기 로, 전화기 가 전화기 로 착신 전환을 걸어 둔 상태에서 전화기 가 전화기 에 착신 전환을 걸어 두면 세 전화기 중 어떤 전화기에 전화를 걸어도 신호 대기 상태가 무한히 유지되며, 세 전화기 모두 먹통이 된다.
이 사실에 깊게 감명받은 도훈이는, 일부 전화기들의 착신 전환 상태를 바꿔 부대 내의 전화기 모두를 먹통으로 만들려는 사악한 계획을 세웠다! 부대 내에는 1 번부터 번까지 총 대의 전화기가 있으며, 각 전화기는 Ai번 전화기로 착신 전환이 되어 있는 상태이다. 만약 Ai=i라면, 번 전화기에는 착신 전환이 걸려 있지 않은 상태임을 의미한다.
하지만 전화기들의 착신 전환 상태를 너무 많이 바꾸면 간부님께 걸릴 것이 분명하므로, 착신 전환 상태를 바꿀 전화기 개수를 최소로 해야 한다. 도훈이를 위해, 착신 전환 상태를 바꿔야 하는 최소 전화기 개수와 착신 전환 상태를 어떻게 바꿔야 하는지 구해 주자. 만약 가능한 착신 전환 상태가 여러 가지라면, 그중 아무거나 구해 주자. 모든 전화를 먹통으로 만드는 것이 항상 가능함을 증명할 수 있다.
나의 코드
#include <iostream>
#define MAX 100000
using namespace std;
int main(){
int A[MAX+1]={};
int n,m=0;
cin >> n;
for (int i=1;i<=n;i++){
cin >> A[i];
if (A[i]==i){
if (i==n){
A[i]=1;
}
else {
A[i]=i+1;
}
m++;
}
}
cout << m << "\n";
for (int i=1;i<=n;i++){
cout << A[i] << ' ';
}
return 0;
}
이 문제는 A[i]와 i가 같을 때만 해결한다면 풀리는 문제다. A[i]와 i가 같을 때 i가 n이라면 1로 아니라면 i+1로 바꿔서 해결했다.
'Algorithm > Beakjoon' 카테고리의 다른 글
카툰컵 Zero: ~Prologue~ (0) | 2024.03.04 |
---|---|
2024 신촌지역 대학생 프로그래밍 대회 동아리 연합 겨울 대회 (SUAPC 2024 Winter) (0) | 2024.02.19 |
제2회 보라매컵 본선 Open Contest UPSOLVING (0) | 2024.02.17 |
제1회 보라매컵 본선 Open Contest UPSOLVING (0) | 2024.02.16 |
solved.ac Grand Arena Party — Division 2 (1) | 2024.02.06 |