카테고리 없음

2023 ICPC Seoul Regional (Mirror) 후기

MongHwa 2023. 12. 2. 18:20

(2023.12.02 - 본대회 스코어보드를 추가하고, 후기 내용을 추가/수정하였습니다.)

(2023.11.25 - 초안을 작성하였습니다.)

 

 

(미러 스코어보드) http://static.icpckorea.net/2023/regional/mirror-scoreboard.html

5시간을 풀로 집중한 건 아니고, 좀 끄적끄적 대다가 더이상 문제가 안 풀리길래 그만뒀습니다. '5시간'이라 하면 별 것 아닌 것 같아도, 생각 외로 끝까지 집중하기가 힘듭니다..

 

4솔 정도면 그래도 스코어보드 잘 따라가면서 능력대로 푼 느낌입니다. 한 문제만 더 풀었으면 좋았을 것 같긴 한데, 아직 거기까진 안 되나 봅니다ㅠ 한 가지 뿌듯한 게 있다면, 4솔 모두 1트로 밀어버렸다는 점..?

 

 

(본대회 스코어보드) http://static.icpckorea.net/2023/regional/scoreboard/

🐧 🐧 🐧

본대회 얘기를 살짝 하자면.. 

대회가 시작하고 나서 스코어보드부터 봤는데, 경희대 팀이 안 보여서 의아했었습니다. 정확한 이유는 잘 모르겠지만, 조금 아쉬웠습니다 ㅠ 다른 대학들에 비해서 ps/cp가 많이 활성화되어 있지 않다는 게 계속해서 아쉬운 요즘입니다..

본대회는 관전자 입장에서 굉장히 흥미진진한 대회였습니다. 4팀이 8솔을 한 절묘한 시점에 프리즈가 이루어져서, 어느 팀이 우승할 것 같다고 쉽게 단언할 수가 없었습니다. 4팀의 대학이 모두 다르다는 점과 1등이 외국대학인 NTU라는 점도 관전 포인트. (개인적으로는, 올해에는 KAIST가 우승했으면 하는 바람입니다.) 

 

스코어보드 공개 방송을 처음부터 본 게 이번이 두 번째(첫 번째는 2021 World Finals (Dhaka))인데, 대회 참가자가 아님에도 불구하고 쫄깃쫄깃한 기분을 느낄 수 있었습니다. 특히 올해에는 개인적으로 KAIST가 우승했으면 하는 바람이 있었는데, 마지막 1위와 2위를 가리는 순간에서 NTU를 솔브 수로 따돌리고 우승을 하는 장면은 이번 대회의 명장면이 아닐까 하는 생각이 드네요. 이번 대회에서 NTU가 굉장히 무서운 기세를 보여주었는데, 그런 와중에도 꿋꿋이 자신만의 기량을 보여준 KAIST의 Penguins팀이 정말로 대단하다는 생각이 듭니다. 축하합니다 !

 

미러에서 올솔이 나오기도 하고, 본대회에서도 A번을 제외한 모든 문제가 풀린 걸 보면 나름 좋은 문제셋이 아니었나 하는 생각이 듭니다. 작년의 이런 문제저런 문제만 봐도.... 너무 쉬운 문제나 너무 어려운 문제 없이 고른 분포를 보인 것 같습니다. 

문제들 중 신선하면서도 엥?스러웠던 문제는 B번이었습니다. 코드가 주어지는 것부터가 신선한데, 그 코드를 해석하는 것도 난이도가 있었다는 것이.. 호불호가 많이 갈릴 것 같은 문제였습니다. 

 

혼자 미러를 치고나니, 더더욱 ICPC에 참가하고 싶어졌습니다. 아직도 많이 미숙하긴 하지만, 25년에는 더 발전된 모습이 되어있지 않을까.. 하는 생각이 드네요. 25년 ICPC는 본선에도 진출해보고, 수상에도 도전해보는, 기분좋은 해가 되면 좋겠습니다..!

 

 

 

 

문제 풀이를 간단하게 남겨봅니다.

 

D번. Fraction

귀찮은 문제. 수식이 올바르다는 가정 하에, 분수 구조체를 만든 다음 문제에서 하라는 대로 계산하면 된다. 유의해야 할 부분은 수식이 올바르지 않은 경우인데, 생각나는 대로 적자면

  1. 괄호 안에 있는 수가 3개가 아님.
  2. 괄호의 짝이 맞지 않음.

스택을 이용하면 식을 잘 풀어낼 수 있다.

 

 

 

 

I번. Product Delivery

맨 끝 도시부터 그리디하게 생각하자. 답을 ans라고 할 때, n번 도시부터 1번 도시까지 거꾸로 보면서, 현재 도시(i번 도시)와 다음 도시(i-1번 도시) 모두에 원하는 만큼 BSB를 줄 수 있다면 넘어가고, 그렇지 않다면 ans를 1 증가시킨 뒤, 다음 도시부터 다시 시작한다.

 

 

 

 

G번. Magic Cards

매번 쿼리가 들어올 때마다 처음부터 후보군을 찾으면 TLE가 난다. 어떤 숫자 x가 가질 수 있는 Y/N문자열을 s[x]라 하자. 이때 초기 Y/N문자열은 "NNNNN...N"이다. i번 카드에 x라는 숫자가 적혀있다면, s[x][i] = 'Y'라 설정할 수 있다. 이 과정을 반복하면 1부터 N까지의 모든 숫자에 대하여 Y/N문자열을 만들 수 있다.

 

이제 쿼리에 답해보자. 어떤 문자열에 대하여 대응하는 수가 없거나 2개 이상인 경우 0을 출력하고, 그렇지 않다면(대응하는 수가 1개라면) 대응하는 수를 출력해준다. 이는 map으로 쉽게 관리해줄 수 있다.

 

 

 

 

B번. Black Box

과정을 거꾸로 따라가보자. #end of while부터 return ( Apple )까지 이어지는 부분은, Apple 리스트에서 0번째 수와 (마지막 수 % len(Apple)) 번째 수를 스왑하는 과정을 나타내고 있다. 다시 스왑해주자.

 

첫 수는 똑같이 고정이고, 다음 수부터는 Apple 리스트의 수가 원래 Banana 리스트의 어디에 위치하고 있는지를 찾아내야 한다. 이는 [세그트리를 이용한 K번째 수 찾기] 문제로 환원시킬 수 있다.