A. All Your Base

다른 숫자들의 조합으로 나올 수 있는 가장 적은 크기의 숫자는

몇 진법의 몇?



B. Center of Mass


점들이 제각각 움직이는데, 점들의 center of mass가 원점으로부터 가장 가까워지는 순간의 거리를 구하기.





C. Bribe the Prisoners


이건 문제 해석에만 1시간이 걸렸다. T_T

문제는 대충 이해했었는데, input의 format이 잘 이해가 안 갔었다.

첫 줄은 test case 개수

그 다음 두 줄씩 한 test case

첫 번째 줄은 cell 개수, prisoner 수. 두 번째 줄은 prisoner가 위치난 cell 번호




by 언제나19 2015. 3. 29. 21:24



Qualification Round. Code Jam will start with a qualification round on Friday, April 10, 2015 at 23:00 UTC (4:00 PM PT) and run for 27 hours, ending on Sunday, April 12, 2015 at 2:00 UTC (Saturday, April 11, 2015 at 7:00pm PT). In the Qualification Round, you must log in to the Contest website to attempt to solve a number of problems within the 27-hour period. If you earn a minimum number of points during the qualification round, which will be displayed on the Contest website, you will advance to Round 1 of Code Jam.

QR은 절대평가. 쉽다고 한다.


Round 1. Code Jam Round 1 is conducted online and is offered in three sub-rounds at the times specified at https://code.google.com/codejam/schedule.html from Saturday, April 18, 2015 (Friday, April 17th PST) to Sunday, May 10, 2015. If you advanced to Code Jam Round 1, you can participate in any or all of the sub-rounds by logging into the Contest website to solve a number of problems until you qualify for Code Jam Round 2. However, once you qualify for Code Jam Round 2, you may not participate in any later sub-rounds of Code Jam Round 1. You will advance to Code Jam Round 2 if you are one of the top-scoring 1000 contestants from one of the sub-rounds in Code Jam Round 1. You will be notified by email after the end of each sub-round if you are one of the 3000 contestants advancing to Code Jam Round 2.

1000명 안에 들어야 하는데, 2009년에는 38점

https://code.google.com/codejam/contest/189252/scoreboard#sp=991


2014년에는 R1A 55점 T_T

https://code.google.com/codejam/contest/2984486/scoreboard?c=2984486#sp=991

R1B, R1C는 38점

https://code.google.com/codejam/contest/2437488/scoreboard#sp=991

https://code.google.com/codejam/contest/2434486/scoreboard#sp=991


If you advanced to Code Jam Round 1, you can participate in any or all of the sub-rounds by logging into the Contest website to solve a number of problems until you qualify for Code Jam Round 2. However, once you qualify for Code Jam Round 2, you may not participate in any later sub-rounds of Code Jam Round 1.

A, B, C 다 참가할 수 있나 보네..

Saturday, April 18, 201501:00 UTC2hr 30minOnline Round 1: Sub-Round A
Saturday, May 2, 201516:00 UTC2hr 30minOnline Round 1: Sub-Round B
Sunday, May 10, 201509:00 UTC2hr 30minOnline Round 1: Sub-Round C


10:00JST
Saturday, 18 April 2015

01:00JST
Sunday, 3 May 2015

18:00JST
Sunday, 10 May 2015


R2통과하려면, 500등..

You will advance to Code Jam Round 3 if you are one of the top-scoring 500 contestants from Code Jam Round 2.



https://code.google.com/codejam/contest/1378488/scoreboard

Code Jam Korea 2012 본선 라운드 - 상위 12명이 다음 라운드로 진출합니다.

https://code.google.com/codejam/contest/889487/scoreboard

Code Jam Japan 2011 予選 - 1つ以上の問題について Small と Large を解いた参加者が決勝に進出できます。








by 언제나19 2015. 3. 19. 22:27

2012년 code jam round 1A를 읽고 문제 풀이에 대해 생각 까지만 해본 내용들 정리.

http://code.google.com/codejam/contest/1645485/dashboard

Problem A. Password Problem


password를 typing 하다가 말고, 아 틀렸나? 하고 생각이 들 때,

1. 계속 typing을 하는 것이 낫나

2. 지우고 typing을 하는 것이 낫나

3. enter 쳐버리고, 처음부터 다시 typing하는 것이 낫나

기대값을 구하기.


첫 번째 문제라서 그나마 쉬운 편이다. 알고리즘이랄 것이 많이 없고, 구현만 잘하면 된다. 내가 구현하면 2.5시간 쯤 걸릴 것 같다. ^^;;

문제 examples에서 계산 방법을 다 설명으로 써놨더라고.

그런데, 막상 구현을 하다보면 막힐 수도 있다. 경우의 수에 따라서 probability와 keystrokes 값을 각각 구해야 하는데, 이 경우들을 어떻게 정의해야 좋을지 막막할 수 있다.

막연히 다차원 배열로 생각하자면, 이미 입력한 keystrokes 개수에 따라서 차원이 마구 늘어나니 힘들다.

1차원 배열이라고 생각하되, 각 경우의 수에 맞는 값을 하나씩 정의하는 것이 좋겠다. 그렇다면, 각 경우의 수를 어떻게 나열하느냐가 관건인데, 각자 프로그래밍 하기 좋은 방법으로 한 가지 원칙을 설정해서 나열하면 되겠다.

그 중 가장 이해가 잘 가는 방법은 2진수를 그대로 사용하는 것이다. keystrokes가 맞는지 안맞는지를 각 자릿수 bit로 생각하면, 2^n만큼 숫자의 2진수 안에 빼곡히 index를 채워넣을 수 있다.

index를 정의했다고 해서 배열을 사용하면 large input 은 통과할 수가 없다. small input은 통과하게 해놨나보다.

배열을 만들어두지 않고, 각 경우의 값을 dynamic하게 계산하는 것이 좋겠다.

계산하는 것도 모든 index에 대해서 계산하면 large input을 통과할 수가 없다. 시간이 부족해서.

겹치는 것들은 한 번씩만 계산한다.

probability를 계산할 때는 1 bit의 개수가 동일한 것들에 대해서 한 번씩만 계산한다. 이건 어떻게 알아내지? bit를 shift해가면서 세야 하나?

keep typing 하는 경우에 대한 keystrokes 계산은 특정 2^n-1 숫자보다 큰 경우와 그렇지 않은 경우로 나눠서 한 번씩만 계산한다.

m번 backspace 하는 경우 계산은 2^n-1보다 작은 경우와 그렇지 않은 경우로 나눠서 한 번씩만 계산한다.


2진수 계산 연습과 확률 계산 연습을 조금씩 해 놓으면 좋겠다.


한편, google solution에는 엄청 간단한 수식으로 풀 수 있다고 써 있는 것 같다. ^^;;


Problem B. Kingdom Rush

다음 문제도 크게 어렵지는 않을 것 같다. 내가 구현하면 2+2시간은 걸리겠지만 ㅋㅋ.

greedy한 방법으로 풀면 되지 않을까 생각한다. 그렇게 해봐서 안되면 망하는 거고.

무조건 별점 2개짜리 먹기부터 다 채운다. 가능한 것부터 아무거나.

끝나면, 별점 1개짜리 중 먹을 수 있는 것을 먹어본다.

계속 반복해도 도달할 수 없는 것이 없게 되면 Too bad.


나중에 google solution을 봤더니, 다행히 greedy algorithm으로 푸는 게 맞다고 하네. ㅎㅎ.

그렇다면야, 2시간이면 풀 수도 있었겠다.


Problem C. Cruise Control

이 문제 풀이 방법까지는 생각도 못했다. 

나는 문제를 읽는 것도 하나 당 15분 이상씩 걸리고, input, output 처리만 1시간은 걸리는데, 문제를 15분 만에 푸는 괴물들은 도대체 뭐지..

이건 풀기를 시도하더라도 생각해야 할 조건도 종종 생길 것 같다. 차 길이 등.

동시에 같은 거리에 2개 이상의 차가 없는지만 계산하는 방법이 있겠다. 

1초마다 모든 차를 이동해가면서 simulation해봐도 small input은 풀 수 있을지도 모르겠다. 보장 못하지.

simulation하는 경우는 backtracking까지 하는 거면 더 어렵겠다. 차가 모두 앞으로 등속이동을 하니, backtracking이 필요 없을 것 같기도 하다. 딱 한 경우만 나오겠네.

차 3개씩의 모든 set에 대해서 같은 시각에 같은 위치에 있는지를 검사해볼 수도 있겠다. large input까지는 안되겠지?


google solution 을 읽다가 깨달았는데, 차가 추월할 때, 옆으로 순식간에 이동하더라도 그 순간 양측에 차가 없어야 된다는 조건을 구현에 넣기가 쉽지 않았을 것 같다.


아, 해설도 열라 기네. 해설을 읽고 풀으라고 해도 5시간 이상 걸리겠다.

영어 공부부터 해야 할 판.










'공부 > Computers' 카테고리의 다른 글

Computer vision 책 추천  (0) 2012.07.16
freemarker manual  (0) 2012.05.31
Havard extensions는 sample 밖에 없기도 한다  (0) 2012.05.27
ai 하나 별로  (0) 2012.05.26
tomcat 사용방법에 대해 공부하기  (0) 2012.05.20
Programming scala 책을 처음 읽기  (0) 2012.03.24
Scala 공부하기  (0) 2012.03.24
java 또는 web framework 공부하기 준비  (0) 2012.03.20
podcast rails 강의  (0) 2012.03.20
code jam 등 algorithms 문제 풀이 대비  (0) 2012.02.26
by 언제나19 2012. 4. 28. 19:38


이런 대회에 참가하려면 미리 준비해둘 것이 있다.
이왕이면 착실하게 준비해보면 좋겠다.
1.5년 동안 반절 만들고,
다음 1.5년 간 나머지를 만들어야지.
공부는 별개로 skiena 강의를 보면서 해야겠다.
 
필요한 것
(general) input parser
test case
test input generator
output parser, output 비교 검증기
output formatter
graph 중간 결과를 출력해볼 수 있는 도구
간소한 logic에 의한 output 검증기 (optimal인지는 검증 못하더라도 조건에 맞는지 검증하기)
bruteforce 풀이 생성기
중간 결과를 맘대로 조작해가면서 볼 수 있는 debugger

analysis
연산량 예상하기.
극한 capacity 인지하기 (memory 어디까지, 연산량 어디까지)

libraries
  1. graph
  2. dfs, bfs, search tree
    ...
준비물
종이, 펜, 컴퓨터, algorithms 책 (눈에 익숙한 것으로),


1년 안에
general input parser tool 을 만들어야겠다.
grammar를 입력하면 data를 import해주는 tool

언어는 뭘로 선택할까
잘 통용되는 것은 java이겠다.
언젠가, ruby interpreter를 공부할 꺼라면, ruby를 공부해보는 것도 좋겠지만, 저 위 준비물을 다 만들 자신이 없네.
그리고, ruby 등은 통용이 안될 때도 있다.
중간 결과를 조작할 수 있는 interpret 언어가 좋기는 하겠는뎅.

합격점이 35점밖에 안됐었는데, 그것도 모르고 너무 무리했었다.
보통의 algorithms도 large input도 엄청 빨리 실행할 수 있는데, 그것도 모르고 너무 무리했었다.
괜히 위축돼 있었네.


by 언제나19 2012. 2. 26. 14:51
| 1 2 |