Competitive Programming 58

대회후기: Codeforces Round #606 (Div. 2)

시험기간과 대회가 겹쳐 후기 작성이 다소 늦어지게 되었다. 시험 대비와 대회 참여 사이에서 조금은 고민했으나, 대회 시작 5분 전에 급하게 데스크탑을 켜고 레지스터를 마쳤다. A: Happy Birthday, Polycarp! 주어진 수 \(n\)보다 같거나 작은 자연수 중에서, 숫자 하나의 반복으로 이루어진 수의 개수를 출력하는 문제이다. 빠르게 구현하기 위해, 입력 \(n\)이 들어오면 \(n\)보다 자릿수가 같거나 작은 모든 '동일 숫자 반복으로 이루어진 수'를 \(n\)과 크기 비교하였다. 시간복잡도는 \(O(\log n)\)이다. 4분에 AC B: Make Them Odd 자연수의 배열이 들어올 때, 모두 홀수로 만들고자 한다. 홀수로 만들기 위한 연산은 특정 숫자를 골라 모든 occurrenc..

대회후기: Sumitomo Mitsui Trust Bank Programming Contest 2019

오늘도 평화롭고 쉬운 AtCoder 대회. A: November 30 두 숫자가 같은지 물어본다. Are you for real?? 1분에 AC B: Tax Rate 나누기 문제. 하지만 round down을 round로 잘못 읽어 WA를 두 번이나 추가. 2 WA 후 9분에 AC C: 100 to 105 C에 와서야 조금 생각해야 하는 문제가 나왔다. 주어진 6개의 숫자의 합으로 입력된 수 \(n\)을 만들 수 있는지 묻는 문제다. 숫자들이 전부 다 100 부근에서 놀고 있으므로, 입력된 수 \(n\) 또한 100이 들어가는 개수 기준으로 생각해 보아야겠다는 느낌이 들었다. 잘 생각해보면 어렵지 않게 100이 들어가는 개수에 따라 가능해지는 나머지 두 자리 수의 범위가 결정됨을 알 수 있다. 13분에 ..

대회후기: Codeforces Round #603 (Div. 2)

이런 저런 일정으로 대회 참여를 못하다가, 오랜만에 복귀하게 되었다. 컨디션이 좋지 않아 평소보다는 못한 것 같지만, 레이팅 방어는 성공하였다. A: Sweet Problem 이번 대회에서 체감상 제일 어려웠던 문제다. 문제 description은 매우 간단한데, 최적의 solution을 찾는 방법을 떠올리지 못해 한참을 헤맸다. 결국 직관적으로 풀었는데, 방법이 맞았던 모양이다. 23분에 AC B: PIN Codes 최대 10개의 PIN code들을 서로 다른 code로 만들기 위한 최소 수정 횟수와 그 수정 결과를 출력하는 문제였다. 거의 문제를 보자마자 마지막 자릿수만 처리한다면 풀 수 있음을 알 수 있었다. 구현하는 것에 시간이 조금 소요되었다. 49분에 AC C: Everyone is a Win..

대회후기: Codeforces Round #600 (Div. 2)

AtCoder 대회를 뛰고 거의 연속으로 코포 대회를 진행했다. A: Single Push 간단한 문제이지만, 불일치하는 지점의 개수가 1인 경우에 대한 예외처리를 적절히 하지 않아 이를 급하게 수정하느라 조금의 지체가 있었다. 7분에 AC B: Silly Mistake 조건에 맞도록 주어진 배열을 분할할 수 있는지를 묻는 문제이다. 같은 사원이 같은 날에 두 번 enter할 수 없다는 조건을 놓치고 그냥 전체를 무조건 하루로 잡고 전체 배열이 조건에 맞는지 확인하는 코드를 짰다. 제출하고 WA. 다시 보고 문제점을 확인, 같은 사원이 다시 enter 하려고 하는 순간 새로운 날이 시작되도록 수정하였다. Pretests passed. 하지만 동일 사원이 다시 들어오려 할 때가 아니라, 모든 사원이 다 나..

대회후기: AtCoder Beginner Contest 145

오랜만에 한 내 두번째 AtCoder 대회. A: Circle 너무 쉬워서 당황했다. 입력값의 제곱을 출력하면 끝. 1분에 AC B: Echo 얘도 쉽다. 설명 생략. 3분에 AC C: Average Length 여기까지는 보자마자 풀이가 떠오르는 문제. 평면 위 N개의 점을 순회할 때의 평균 거리를 구하는 문제이다. 모든 두 점 사이의 거리를 전부 구한 후, 이를 다 더한 후 적당한 수로 나눠서 풀었다. 9분에 AC D: Knight 이 문제는 살짝 고민했다. Knight의 두가지 움직임의 횟수가 유일하게 정해지는 사실을 깨닫기까지 시간이 좀 걸렸다. 이를 확인한 후에는 빠르게 연립 1차방정식의 해를 찾는 코드를 짰고, \( \binom nr\mod p\)의 값을 구하는 함수를 만들었다. 하지만 WA를..

대회후기: Educational Codeforces Round 76 (Rated for Div. 2)

일주일만에 Codeforces에서 대회를 뛰었다. 대회 직전에 잠깐 잠을 자다가 못 일어날뻔 했다. 시작 10분 전에 일어나서 데스크탑을 켜고 대회 start. A: Two Rival Students 1분 이내로 풀었어야 하는 쉬운 문제. 라이벌 두명을 이웃한 학생과 x번 swap해서 최대한 멀리 떨어뜨리는 문제이다. 그냥 거리를 x만큼 더 벌리면 된다. 하지만 문제를 잘못 읽어 이웃한 학생만 swap할 수 있다는 조건을 놓쳤다. WA 추가 && 6분 낭비 후 AC B: Magic Stick 주어진 두 operation의 특성을 보고, 일정 숫자 이상이면 모든 숫자를 만들 수 있음을 알아차리면 된다. 3 이하의 숫자로 시작할 때만 잘 처리하면 되는데, 경우를 예쁘게 나누지 못해 if else 코딩하느라 ..

2019 대회요약: Code Jam, Hacker Cup, UCPC, SNUPC, ACM-ICPC

앞으로 치를 대회들만 블로그에서 다루기에는 올해에 겪은 대회들이 너무나 많고 소중한 경험이다. 하지만 지난 대회들을 정리하자니 너무 시간이 오래 지나 기억이 나지 않는다... 고로 간략하게 느낌만 적어본다. Google Code Jam 시기: 2019년 4-5월 처음 참여해본 제대로 된 CP 대회. C++ 실력에 자신이 없어(지금도 없다) Python으로만 대회를 진행했던 것 같다. 프로그래밍 경험 자체가 없었던 것은 아니기에 완전 초보자 실력은 아니었다. Qualification Round를 거쳐 Round 1, Round 2까지 진출했었다. 문제들은 여러 알고리즘을 모르더라도 (중고등학교 수준의) 수학적 지식을 동원하면 풀 수 있도록 나왔던 것으로 기억한다. CP가 해볼 만 하다는 느낌을 받았다. F..

ID: Handles and Websites

내가 가입된 주요 사이트들과 사용하는 핸들이다. Competitive Programming handles Codeforces: syphon (http://codeforces.com/profile/syphon) BOJ: syphon (https://www.acmicpc.net/user/syphon) AtCoder: syphon (https://atcoder.jp/users/syphon) Topcoder: syphon (https://www.topcoder.com/members/syphon) 기타 StackOverflow: syphon (https://stackoverflow.com/users/5697203/syphon) GitHub: SyphonArch (https://github.com/SyphonArc..