잡글 가득 블로그
article thumbnail
Published 2021. 5. 23. 01:04
AtCoder Beginner Contest 202 PS 기록들

A. Three Dice

void solution() {
      cin >> a >> b >> c;
      cout << 21-a-b-c;
}

B. 180°

char f(char x) {
      if (x == '6') return '9';
      if (x == '9') return '6';
      return x;
}

void solution() {
      cin >> s;
      reverse(ALL(s));
      for (char c : s) {
          cout << f(c);
      }
}

구현에서 요령 피우면 쉽게 풀 수 있다. \(f(x)\)를 설정하는 것과 reverse 함수를 활용하는 것이 요령.

주의할 점은 문자 형태로 ' '를 씌워야 한다는 것이다.

C. Made Up

void input() {
      cin >> n;
      REP(i,1,n) cin >> a[i];
      REP(i,1,n) cin >> b[i];
      REP(i,1,n) cin >> c[i];
}

void solution() {
      input();
      REP(i,1,n) ++cnt[b[c[i]]];
      ll ans = 0;
      REP(i,1,n) ans += cnt[a[i]];
      cout << ans;
}

약간 고민하면 배열에 \(N\) 범위를 담는게 가능하고, \(\mathrm{cnt}\) 배열로 만들어서 활용하면 되겠단 걸 알 수 있다.

D. aab aba baa

ll C(int n, int r) {
      if (n == r || r == 0) return 1;
      if (ready[n][r]) return dp[n][r];
      ready[n][r] = true;
      return dp[n][r] = C(n-1,r)+C(n-1,r-1);
}

void solution() {
      cin >> a >> b >> k;
      while (a+b) {
            if (!a || !b) break;
            if (ll c = C(a-1+b,b); c < k) {
                  k -= c; cout << 'b'; --b;
            } else {
                  cout << 'a'; --a;
            }
      }
      REP(i,1,a) cout << 'a';
      REP(i,1,b) cout << 'b';
}

진법의 아이디어이다. 전에 포스팅한 2020.11.09 - [수학/조합론 공부] - 계승 진법이 이해에 도움이 될 것이라 생각한다.

뭐 엄밀하게 증명도 가능하겠는데, 바로 알겠으니 필요 없을 듯.

'PS 기록들' 카테고리의 다른 글

Codeforces Round 736 (Div.2)  (0) 2021.08.02
제 3회 류호석배 알고리즘 코딩 테스트  (0) 2021.07.21
7월 PS 일지  (0) 2021.07.19
6월 PS 일지  (0) 2021.06.05
정보올림피아드 공식 교재  (1) 2021.02.09
profile

잡글 가득 블로그

@도훈.

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...