Sogang Programing Contest 2023 후기

Sogang Programing Contest

서강대에서는 매년 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시에 기숙사로 들어옴. 개피곤….

Sogang Programing Contest

아침에 본 내 책상 상태… 바쁨과 더러움이 느껴진다;; 의자에 앉을 수가 없어요…

다음날 1시쯤 일어나서 준비하고 뛰쳐나감.

입에 김밥 쑤셔 넣고, 아메리카노 사서 출발.

이게 대학생의 삶인가…?

SPC 2023 대회 후기

Sogang Programing Contest

출제된 문제는 아래에서 확인 가능합니다.

BOJ SPC 오픈 콘테스트 링크

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 대회 결과

Sogang Programing Contest

실참여자가 총 26명이어서, 학회원 유지에 성공했습니다!

하지만 결과 측면에서는 조금 아쉽네요… D는 풀었어야 됐는데;;

내년에 더 공부 열심히 해서 돌아오겠습니다 ㅎㅎ

하지만 숙취코딩. 이정도면 성공적.

Kinsechs(밴드부 공연) 보러가자

친구가 밴드부 공연을 해서 구경하러 대회 끝나자마자 시상식 빠지고 바로 출발!

Sogang Programing Contest

드럼 진짜 미친 듯. 비비빅 진짜 너무 멋있다…. 난 음치에 박치인데;; 반했어요호

그리고 48기에 피아노 분도 완전 대박. 멋져요……

공연 끝나고 같이 사진 한장, 군대 휴가 내고 놀러 오신 분도 찾을 수 있음 ㅋㅋㅋ

Sogang Programing Contest

그리고 꽁꽁 싸매고 온 북극 주민도 찾을 수 있음

Sogang Programing Contest

비비빅한테 받은 빼빼로. 너무 귀여운거 아니냐??

배고파요

대포찜닭 먹고 끝.

Sogang Programing Contest

Sogang Programing Contest