5월 20일에 개최된 2023 청정수컵에서 각 Round에 한 문제씩 냈다.
새내기 Round
- 23학번 학회원이라면 누구나! 참가 자격 제한 없이 모두 참여 가능
청정수 Round
아래의 제한 조건에 해당하지 않는 모든 학회원
- Codeforces 1600 이상
- Atcoder 1200 이상
- Solved.ac Platinum Ⅲ 이상
- ICPC, UCPC, SUAPC, Camp Contest, SCPC, SPC, 청정수컵 등의 프로그래밍 대회 수상자
이민희진 (BOJ 28064)
https://www.acmicpc.net/problem/28064
28064번: 이민희진
첫 줄에 연결할 수 있는 서로 다른 사람 쌍의 개수를 출력한다.
www.acmicpc.net
새내기 Round D번이다.
문제 세팅해주신 yunny_world님께 다시 한번 감사드립니다.
이전에 친구들이랑 이야기한 것에서 영감을 얻었다. 코딩을 처음 배운 분들에게 적당히 복잡한 구현 문제가 되길 기대했다.
결과적으로 ‘적당’하진 않았는데
이것보다 E를 더 많이 푸셨다.
코드 짜보니까 복잡하긴 하더라!
bool is_connectable(const string& a, const string& b, bool is_swapped) {
int max_step = min(a.length(), b.length());
for (int cnt = 1; cnt <= max_step; ++cnt) {
bool same = true;
for (int i = 0; i < cnt; ++i) {
if (a[a.length() - cnt + i] != b[i]) {
same = false;
break;
}
}
if (same) {
return true;
}
}
if (is_swapped) {
return false;
}
else {
return is_connectable(b, a, true);
}
}
int main() {
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int n; cin>> n;
vector<string> arr(n);
for (int i = 0; i < n; ++i) {
cin >> arr[i];
}
int count = 0;
for (int i = 0; i < n; ++i) {
for (int j = i + 1; j < n; ++j) {
count += is_connectable(arr[i], arr[j], false);
}
}
cout << count << kEndl;
}
대회 끝나고 얼핏 듣기로는 파이썬으로 문자열 슬라이싱해서 비교하는 방법이 생각났는데 구현을 못 떠올려서 못 푼 분들도 있으신 거 같았다.
김밥천국의 계단 (BOJ 28069)
https://www.acmicpc.net/problem/28069
28069번: 김밥천국의 계단
첫 번째 줄에 계단 개수에 해당하는 $N$, 계단을 오르는 횟수 $K$가 주어진다. $(1 \leq N, K \leq 1\,000\,000)$
www.acmicpc.net
새내기 Round C번이다.
문제 세팅해주신 tkfkddl59323님께 다시 한번 감사드립니다.
이전부터 ‘미니김밥’을 살린 문제를 꼭 만들고 싶었고 마침 아이디어가 번뜩 떠올랐다.
0번째 계단에서 지팡이를 계속 두드리면 횟수를 차감할 수 있다는 것만 떠올리면 DP로 적당히 풀만한 문제가 될 거 같았다.
결과적으로 ‘적당’하진 않았는데
전반적으로 시도 횟수가 많고 대회 중에 이것보다 D를 먼저 푸는 분이 많았다. 여기서 말리신 거 같기도 하다.
원래는 B였는데 dong_gas의 검수 덕분에 C로 바뀐 게 정말 다행이다.
int main() {
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int n, k; cin >> n >> k;
vector<int> count(n + 1, n);
count[1] = 1;
for (int i = 1; i <= n; ++i) {
if (i + 1 <= n) {
count[i + 1] = min(count[i + 1], count[i] + 1);
}
if (i + i / 2 <= n) {
count[i + i / 2] = min(count[i + i / 2], count[i] + 1);
}
}
cout << ((count[n] <= k) ? "minigimbob" : "water") << kEndl;
}
BOJ에 내가 만든 문제를 하나쯤 올리고 싶었는데 정말 하게 돼서 아주 신난다.
덕분에 이번엔 출제위원 이름표도 적었다 ㅎㅎ
도움 주신 두 분께 다시 한번 감사드립니다!
https://blog.naver.com/mini_gb/223113610268
[출제] 2023 청정수컵 (이민희진, 김밥천국의 계단) - Sogang ICPC Team
5월 20일에 개최된 2023 청정수컵에서 각 Round에 한 문제씩 냈다. 새내기 Round - 23학번 학회원이라면 ...
blog.naver.com