Processing math: 100%
알고리즘 블로그
article thumbnail
Published 2021. 5. 23. 01:04
AtCoder Beginner Contest 202 PS 기록들

1. A. Three Dice

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

2. B. 180°

<cpp />
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 함수를 활용하는 것이 요령.

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

3. C. Made Up

<cpp />
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 범위를 담는게 가능하고, cnt 배열로 만들어서 활용하면 되겠단 걸 알 수 있다.

4. D. aab aba baa

<cpp />
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

알고리즘 블로그

@도훈.

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