[코딩 대회 후기] 서강대학교 프로그래밍 대회(SPC) 후기 + 킨젝스 공연 관람
Sogang Programing Contest 2023 후기
서강대에서는 매년 1학기에 청정수컵, 2학기에 SPC가 열립니다.
저는 Sogang ICPC라는 학회에 들어가 있는 상태인데, 매 학기 ‘학회원 유지 조건’을 만족해야 합니다. 그 조건 중 하나가 SPC 참여자(신청만 하고 불참하는 인원 제외하고) 중 50% 이내 성적을 거주는 것입니다.
문제는 어쩌다 보니 미친 스케줄이 되어 버렸다는 점…;;;
- 11/9 16:00 ~ 11/10 17:30 심소랑 강릉 여행
- 11/10 19:00 ~ 11/11 배구부 엠티
- 11/11 14:00 ~ SPC
- +a
엠티 바로 다음날 2시라니. 숙취 코딩 각.
대회 직전
강릉 여행 갔다가 서울역 내리자 마자 기숙사 들러서 짐 놓고 배구부 MT감.
MT에서 밤새고 새벽 6시에 기숙사로 들어옴. 개피곤….
아침에 본 내 책상 상태… 바쁨과 더러움이 느껴진다;; 의자에 앉을 수가 없어요…
다음날 1시쯤 일어나서 준비하고 뛰쳐나감.
입에 김밥 쑤셔 넣고, 아메리카노 사서 출발.
이게 대학생의 삶인가…?
SPC 2023 대회 후기
출제된 문제는 아래에서 확인 가능합니다.
1학기 때 청정수컵과 비슷하게 된 것 같습니다.
시작하고 1시간 정도에 A,B,C는 다 풀었습니다. 그 뒤로 아무것도 못 풀었다는 게 함정 ㅋㅋㅋㅋ
A(30617). Knob
그냥 문제 지문만 정확하게 읽고 조건문만 처리하면 되는 문제였습니다.
#include <iostream>
using namespace std;
int main() {
int t, l, r, ls = 10, rs=10, ans=0;
cin >> t;
for(int i=0; i<t; i++) {
cin >> l >> r;
if(ls == l && l!=0) ans++;
if(rs == r && r!=0) ans++;
if(l==r && l!=0) ans++;
rs = r;
ls = l;
}
cout << ans;
}
B(30618). donstructive
여기부터는 노트를 사용했습니다.
쭉 써보니까 수학적 규칙이 나옵니다.
\[i * (n+1-i)\]위로 볼록한 이차방정식 꼴인데, (n+1)/2가 축이죠. 그냥 (n+1)/2에서 가까운 위치부터 큰 수를 배치해 주면 됩니다.
ex) n = 9 1 3 5 7 9 8 6 4 2
마찬가지로 어려운 구현은 없습니다.
#include <iostream>
using namespace std;
int arr[200001];
int main() {
int n, cnt;
cin >> n;
cnt = n;
for(int i=0; i<=n/2; i++) {
arr[n/2+i+1] = cnt;
arr[n/2-i] = cnt-1;
cnt-=2;
}
//
for(int i=1; i<=n; i++) {
cout << arr[i] << " ";
}
}
C(30619). 내 집 마련하기
앞의 문제에 비해 시간이 좀 걸렸습니다.
제 풀이 방법의 핵심을 정리하자면,
- 배열 저장 방식 arr[i] = k일 때, i가 사람의 번호이고, k가 집의 번호를 의미합니다. cin 부분을 보시면 이해하실 수 있습니다.
- 교환 조건: \(i*arr[i]+j*arr[j]<i*arr[j]+j*arr[i]\)
#include <iostream>
using namespace std;
int main() {
int n,m,inp,l,r;
int a[301] = {};
int arr[301] = {};
cin >> n;
for(int i=1; i<=n; i++) {
cin >> inp;
a[inp]=i;
}
cin >> m;
for(int t=0; t<m; t++) {
for(int i=1; i<=n; i++) {
arr[i] = a[i];
}
cin >> l >> r;
for(int i=l; i<=r; i++) {
for(int j=l; j<=r; j++) {
if(i==j) continue;
if(i*arr[i]+j*arr[j]<i*arr[j]+j*arr[i]) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++){
if(arr[j]==i) {
cout << j << " ";
break;
}
}
}
cout << "\n";
}
}
D
1시간 30정도 가량을 D번을 계속 시도했는데, 계속 무한 루프가 도는 케이스가 있더라고요..
E
마지막 30분 정도를 E에 썼는데, 재귀함수 + 메모제이션으로 풀었습니다. 결과는 시간 초과
………………
어제 오픈 콘테스트 올라오고 다시 풀어보는데, 도무지 모르겠어서 답지를 보니, dp+binarySearch를 이용해서 nlogn으로 풀어야 한다고 하네요.
나중에 더 공부하고 다시 풀어봐야 겠다………….
SPC 2023 대회 결과
실참여자가 총 26명이어서, 학회원 유지에 성공했습니다!
하지만 결과 측면에서는 조금 아쉽네요… D는 풀었어야 됐는데;;
내년에 더 공부 열심히 해서 돌아오겠습니다 ㅎㅎ
하지만 숙취코딩. 이정도면 성공적.
Kinsechs(밴드부 공연) 보러가자
친구가 밴드부 공연을 해서 구경하러 대회 끝나자마자 시상식 빠지고 바로 출발!
드럼 진짜 미친 듯. 비비빅 진짜 너무 멋있다…. 난 음치에 박치인데;; 반했어요호
그리고 48기에 피아노 분도 완전 대박. 멋져요……
공연 끝나고 같이 사진 한장, 군대 휴가 내고 놀러 오신 분도 찾을 수 있음 ㅋㅋㅋ
그리고 꽁꽁 싸매고 온 북극 주민도 찾을 수 있음
비비빅한테 받은 빼빼로. 너무 귀여운거 아니냐??
배고파요
대포찜닭 먹고 끝.