Problem Solving/AtCoder

[앳코더 / AtCoder] AtCoder Beginner Contest 322 (ABC 322)

nageune 2023. 10. 1. 03:33
728x90
반응형

Atcoder Beginner Contest 322 (ABC 322)

 

문제 세트는 여기서 확인할 수 있다.


문제

A. First ABC 2 (AC / 1 min 44 sec)

더보기

문자열 s에서 "ABC"가 처음 등장하는 위치가 몇 번째 문자인지 출력하는 문제. 없는 경우 -1을 출력한다.

#include <bits/stdc++.h>
using namespace std;
int main() {
  cin.tie(0)->sync_with_stdio(0);
  int n;
  string s;
  cin >> n >> s;
  if (s.find("ABC") != -1)
    cout << s.find("ABC") + 1;
  else
    cout << -1;
}

 

B. Prefix ans Suffix (AC / 5 min 23 sec)

더보기

문자열 S가 T의 접두사인지, 접미사인지, 둘 다인지, 둘 다 아닌지에 따라 출력하는 문제.

#include <bits/stdc++.h>
using namespace std;
int main() {
  cin.tie(0)->sync_with_stdio(0);
  int n, m;
  string s, t;
  cin >> n >> m >> s >> t;
  if (t.substr(0, n) == s) {
    if (t.substr(m - n, n) == s)
      cout << 0;
    else
      cout << 1;
  } else if (t.substr(m - n, n) == s)
    cout << 2;
  else
    cout << 3;
}

 

C. Festival (AC / 11 min 41 sec)

더보기

먼저 불꽃놀이를 하는 날을 입력받는다. 1~N일에 대해 가장 가까운 다음 불꽃놀이 날까지 남을 날의 수를 출력한다.

입력이 오름차순인 것이 보장되어 있었기에 lower_bound로 해결했다.

#include <bits/stdc++.h>
using namespace std;
int main() {
  cin.tie(0)->sync_with_stdio(0);
  int n, m;
  cin >> n >> m;
  vector<int> v(m);
  for (int i = 0; i < m; i++)
    cin >> v[i];
  for (int i = 1; i <= n; i++)
    cout << *lower_bound(v.begin(), v.end(), i) - i << '\n';
}

 

E. Product Development (TLE)

더보기

K개의 파라미터가 모두 P 이상이 될 수 있도록 N개의 플랜 중 적절히 골라야한다. 각 플랜은 비용이 있고 최소 비용을 구하는 문제.

백트랙킹으로 문제를 해결하고자 했는데 TLE를 받았다. 조건을 추가해서 시간을 줄여봐도 소용없었다.

정해는 비트마스킹 + dp인 것 같다. 영문 에디토리얼이 올라오면 업솔빙 해봐야겠다.


총평

코드포스만 해보다가 처음 앳코더 콘테스트에 참가해봤다. 초보자는 ABC만 하라고 들어서 ABC에 맞춰서 참가해봤다.

C번까지는 쉬웠는데 D부터 급격한 난이도 상승을 느꼈고 E Solve가 D보다 많은 것을 보고 바로 E로 도망갔다.

확실히 코드포스보다 문제가 직관적이고 쓸데 없는 스토리텔링이 없어서 좋았다.

스코어 계산 방식이 달라서 문제 푼 시간이 초 단위로 반영되기 때문에 시간 줄이기에 더 열심히 해야겠다고 생각했다.

개인적으로 코드포스보다 앳코더가 더 재밌는 것 같다. 특히 대회 시간이 길지 않아서 최고다.

728x90
반응형