'알고리즘'에 해당되는 글 2건

  1. 2008/07/18 Google Code Jam 2008 - Qualification Round (2)
  2. 2008/02/10 UVa 100문제 달성!!! (1)

사용자 삽입 이미지

C언어가 나올때까지 리플래쉬 해서 찍은 이미지!

뛰어난 프로그래머의 등용문 이라고 불려지는 구글 코드잼!
24시간이라는 제한시간에 3문제 밖에 나오지 않아서 처음엔 문제의 난이도가 얼마나 어려운거야 @_@ 라고 생각을 했는데, 이미 3문제를 모두 푼 사람이 수두룩 했다 -_-;

문제는 생각보다 어렵지 않았다, A와 B번 문제는 쉽게 풀 수 있었는데, small을 한번에 가볍게 통과하고 large도 대회가 끝나고 체점이 된것을 확인하니 모두 통과 50점으로 마감할 수 있었지만.. 문제를 풀었다고 해도 이렇게 풀면 왜 정답이 나오는지는 증명하는 방식을 모른다. 학부 알고리즘 시간에도 알고리즘 증명 방법 같은건 배웠던 기억이...-_-; Algospot에 A번 증명하는 글은 올라왔으니 보고 머리를 굴려보도록 하자!
(문제는 정말 쉬웠는데, 영어 해석이 잘 안됐고 [......] 알고리즘은 쉽게 떠올렸으나 코딩이 잘 안됐다 [......]  코딩연습 부족 ㅠㅠ)

C번은 어려웠다, ACM문제 풀때도 저런 복잡한 그림이 나오면 일단 지나가고 봤었는데 large를 두개다 틀리면(기우였지만) 25점을 넘기지 못해 Online Round1에 진출할 수 없기 때문에 풀려고 덤볐는데.

처음엔 적분을 이용해서 풀까? 라고 생각을 하다가 예전에 풀었던 문제가 생각이 나서(난 적분을 이용해서 풀었는데 같이 스터디를 진행했던 Andstudy분들은 중학교 수학지식으로 풀으셨다. 왠지 진기분 -_-;;) 적분 말고 다른 방법을 골똘히 생각해보기 시작! 하지만 결국 gg를 쳤고, gpgstudy에 누군가가 "이 문제는 적분을 이용해야 한다는군요" 라는 글을 보고 그냥 깔끔하게 적분을 이용해서 풀기 시작했다.

라켓의 전체 영역을구하고 파리를 잡을 수 있는 영역을 구해서 나누는 식으로 문제를 접근!
라켓의 중심을 원점으로 생각하고 1사 분면의 영역만 구한다음에 4를 곱해서 계산을 했는데......
테스트 케이스의 1번째와 3번째는 제대로 나오는데 2번째와 4, 5 번째는 제대로 안나오는거다. 뭐가 문제인지 몇시간 동안 고민을 해보고 디버깅을 해봐도 생각했던 적분 방식대로 코드는 제대로 돌아가고, 혹시 적분 테이블에 있던 root( a² - x² )의 부정적분 연산 결과가 잘못되었나 의심이 들어서 [.....] 몇가지 방식으로 검증도 해봤으나 아무런 이상이 없다.

결국 몹쓸 생각(예시로 나와있는 답이 잘못된거야!)을 해버리고 그대로 풀어서 제출 -____-; incorrect를 받고 gg쳐버리고 그냥 잠을 잤다.

일어나서 회사에서 일을 하려고 해도 머리속에서 계속 맴도는 그 문제, 다시 소스코드를 들여다보니 왠걸.. 파리는 살짝 스치기만 해도 돌아가시기 때문에 모든 Hit영역에 파리의 반지름을 적용해서 계산해야 하는데 안쪽 스트링에는 제대로 적용시켰지만 라켓의 테두리엔 그걸 빼먹었던거다. 안쪽 영역을 구했던 S = R-t; 라는 코드를 S = R-t-f; 로 고치고 (딱 2bytes추가) 제출해보니 Correct.

이것만 풀어도 순위가 2000여 등에서 500등 정도까지 쑥 올라가는건데 너무 아쉽다. 본격적인 Online Round가 시작되면 제대로된 알고리즘 문제가 출제되기 시작할테고, 그럼 아직 잘 모르는 난 실력차이가 확실히 나서 저만치 밀릴꺼 같은데 ㅠ_ㅠ..

더도 말고 덜도 말고 구글코리아에 가서 티셔츠라도 받아봤으면 하는 작은 바람..

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Mastojun
사용자 삽입 이미지

http://acm.uva.es/p 에 있는 2000여개의 문제중 드디어 100개를 풀었습니다 [....] 제작년에 ACM-ICPC라는 대회를 접하게 되면서 Programming Challenges를 사서 공부를 했었는데, 두달정도의 준비기간동안 충분한 준비를 하지 못해서 고배를 마셨던 기억이 [......] 있는데요, 산업기능요원으로 복무하는동안 알고리즘 문제를 풀면서 실력을 차곡 차곡 쌓고자 위 사이트의 문제를 풀기 시작했습니다.

이번에 풀면서 어려운 문제는 전혀 안건들었어요. 쉬운문제가 2000개중에 100개는 있겠지! 라는 생각으로 간단한 수열혹은 규칙만 사용하는 문제들을 골라골라 풀어서 100개를 달성했습니다. (이중에는 큐나 스택등의 초 간단한 자료구조를 필요로 하는 문제도 있었던거 같아요. 왠만해서는 안풀었습니다만..... 정확히 기억이 -_____-;;) 문제를 풀면서 "팩토리얼" 과 ,"소수"을 가지고 얼마나 문제를 울궈먹을 수 있는지를 느낄 수 있었습니다. 무슨 변형문제가 그렇게 많은지.. ( 쉬운 문제의 기준은 http://felix-halim.net/uva/hunting 와, 개편된 uva의 문제 사이트인 http://icpcres.ecs.baylor.edu/onlinejudge/ 의 %를 참고했습니다.)

어떤 문제는 당황스럽게까지 했는데, 600자리의 정확도를 요하는 문제인듯 보였으면서 double형으로 계산해도 Accepted가 뜨는 문제도 있었어요, 영어 해석이 전혀 되지 않아서 http://acm.uva.es/board 에 풀이를 올려준 글을 보고 풀었던 문제도 있고(완소 board♡)... 쉬운줄 알고 덤볐다가 전혀 갈피를 잡지 못하고 결국 gg친 문제도 있습니다.

문제를 풀면서 느꼇던 점들은 http://uva.xo.st 에 올렸는데, 올린 날짜들을 보니 작년에 쉬운거 100문제 풀기를 도전했을때 잠시 반짝 하고 그간 너무 띄엄띄엄 풀었다는게 눈에 확 띄네요. 반성반성.

쉬운문제 100개정도 풀고 어려운 알고리즘 공부를 하자 라고 다짐을 했었으니, 이제 알고리즘 공부 본격적으로 해야 하는데.... 사둔 알고리즘 책은 이미 5권을 넘어섰고, 그 내용또한 간단한게 아닌데다가 회사 프로젝트는 점점 빡빡해지고 영어공부랑 자격증 취득 계획도 있어서 언제 공부가 가능할련지 모르겠습니다. ㅠㅠ... 적어도 Introduction to Algorithms에있는 내용의 반 이상은 알고(사실 거의다 아는게 희망사항!), STL은 모두 사용할 수 있을정도의 실력은 키우고 싶은데 말이죠..

학부 2학년에 있던 자료구조및알고리즘 시간에 나름대로 열심히 수강을 했고, 그때는 배운걸 직접 손수 구현이 가능했는데 지금은 솔직히 불가능합니다 -_-.. 그때 배웠던 책을 꺼내들고 다시 복습한 다음에 Introduction to Algorithms이나 The Art of computer Programming을 읽어야 겠어요..

언제나 하고싶은건 많고 해야할 일도 많은데 시간이 부족한거 같습니다.ㅜㅜ
 
여담이지만.. 요즘 The Secret이란 책을 읽고 있는데, 그 책에서 "시간이 부족하다" 라고 생각을 하면 정말 시간이 부족해진다던데.. "난 시간이 충분해^^" 라고 생각을 하며 진짜로 그렇게 믿고 살아야 한답니다. (말이 좀 이상하네요 ^^;;)
크리에이티브 커먼즈 라이선스
Creative Commons License

'공부 > 프로그래밍 일반' 카테고리의 다른 글

UVa 100문제 달성!!!  (1) 2008/02/10
복잡한 포인터 선언 이해하기  (1) 2007/09/18
다중 포인터 배열의 포인터  (2) 2007/09/14
디버깅 모드와 릴리즈 모드  (2) 2007/09/12
Hello World!  (6) 2007/01/19
Posted by Mastojun