새벽 1시에 열렸던 상금매치.. 항상 매치 끝나고나면 아쉬움이 남는군.. ㅎㅎ

250점은 좀 쉬운 문제가 나왔는데.. 아쉽게도 심한 삽질을 하고 말았다..
한잠 후에 오류를 발견하고 resubmit.. ㅠ_ㅠ;; 그래도 resubmit해서 pass했으니 다행인건가..
그래도 챌 하나 성공시켰다는데 상당히 만족한다.. 더군다나 이번에는 블챌도 아니었으니..
500점짜리도 무려 30줄 짜리 테스트케이스를 만들었는데.. 결국 시도해보지는 못했다..
잽싸게 한명 잡고 테스트케이스 한줄 입력하고있을때 이미 딴사람이 챌 해버렸다.. -_-;; 허무하군..
의외로 많이 fail했는데.. 나머지한테도 시도해볼껄 그랬나.. red도 fail일줄은 몰랐네..

rating은 이번에도 소폭 상승..!! 세번 연속 올랐다.. 이것도 의왼데.. -_-;
방 16등이라서 rating 좀 떨어질 줄 알았는데.. 전체 700명중에 410등이면 비교적 선전한 모양이다..
실력은 감퇴하고있는데.. rating은 오히려 오르고있으니.. 이거 왠지 불안해진다.. ㄷㄷㄷ

그건 그렇고.. 밀린 후기들.. 언제 다쓰지..?

방 16등 전체 410등


사용자 삽입 이미지



Level1 - RelativePath

more..

유닉스에서 두개의 절대경로가 주어진다.. 두번째 디렉토리에서 첫번째 디렉토리로 가기위한 상대경로 구하기..

음.. 문제가 열라 길었는데.. 이거 다 읽을필요도없는데.. 괜히 힘들게 다읽었다.. ㅠ_ㅠ 샘플만 봐도 파악할수있는 문제였는데..;;

아무리 level1 문제이지만.. 생각보다 쉬운문제가 나왔다.. 그냥 직관적으로 앞에서부터 쭉 읽으면서 서로 다른 디렉토리가 나올때까지 읽는다.. 그리고나서 두번째 경로를 그 지점까지 위치하기위해서 "../" 를 수행하고.. 그 지점부터 첫번째 경로의 남은 부분을 들어가면 된다..

음.. 나는 결과가 ".." 로 끝날경우 "/"를 반드시 붙여줘야된다고 생각했다.. (왜그랬지.. -_-) 나중에 잘못생각한것을 알고 리서밋.. 덕분에 점수가 와장창 날라갔다.. ㅠ_ㅠ

그래도 챌 하나 성공시킨것은 고무적이다.. 블챌이 아닌 코드분석후 챌 성공은 참 오랜만인것 같다.. 타겟도 못찾은 버그를 내가 찾다니..

  1 #include <iostream>
  2 #include <cstdio>
  3 #include <algorithm>
  4 #include <vector>
  5 #include <string>
  6 using namespace std;
  7
  8 class RelativePath {
  9 public:
 10
 11 string makeRelative(string path, string currentDir)
 12 {
 13     int n, m;
 14     int i, j, k;
 15     char path1[100][100], path2[100][100], buf[100];
 16     char res[100][100];
 17     char* ptr;
 18     string ret;
 19     n = m = 0;
 20     strcpy(buf, path.c_str());
 21     ptr = strtok(buf, "/ ");
 22     while (ptr != NULL) {
 23         strcpy(path1[n], ptr);
 24         n++;
 25         ptr = strtok(NULL, "/ ");
 26     }
 27     strcpy(buf, currentDir.c_str());
 28     ptr = strtok(buf, "/ ");
 29     while (ptr != NULL) {
 30         strcpy(path2[m], ptr);
 31         m++;
 32         ptr = strtok(NULL, "/ ");
 33     }
 34     i = 0;
 35     while (1) {
 36         if (i < n && i < m) {
 37             if (strcmp(path1[i], path2[i]) != 0)
 38                 break;
 39         }
 40         else
 41             break;
 42         i++;
 43     }
 44     if (i == n && i == m)
 45         return "";
 46     k = 0;
 47     for (j = m-1; j >= i; j--) {
 48         strcpy(res[k], "..");
 49         k++;
 50     }
 51     for (j = i; j < n; j++) {
 52         strcpy(res[k], path1[j]);
 53         k++;
 54     }
 55     ret = res[0];
 56     for (i = 1; i < k; i++) {
 57         ret += "/";
 58         ret += res[i];
 59     }
 60 printf("ret = %s\n", ret.c_str());
 61     return ret;
 62 }
 63 };




Level2 - AllCycleLengths

more..




to be updated..



Level3 - ReasonableOdds

more..




to be updated..

'Problem Solving > TopCoder logs' 카테고리의 다른 글

TopCoder SRM 412 Div 1  (0) 2008.08.01
TopCoder SRM 410 Div 1  (2) 2008.07.20
TopCoder SRM 409 Div 1 (완료)  (0) 2008.07.11
TopCoder SRM 408 Div 1  (0) 2008.07.03
TopCoder SRM 407 Div 1  (2) 2008.06.28
TopCoder SRM 405 Div 1  (2) 2008.06.15
TopCoder SRM 404 Div 1  (2) 2008.06.06
TopCoder SRM 402 Div 1  (0) 2008.05.25
TopCoder SRM 401 Div1  (2) 2008.05.07
TopCoder SRM 400 Div 1  (0) 2008.05.02
리눅스에서 탑코더하기..  (0) 2008.05.01

Comments

  1. mynotepad 2008.06.16 03:38 신고 Permalink Modify/Delete Reply

    Level1 의 Critical Test case...
    path = /abc/ab currentDir = /abc/a
    답 : ../ab 사람들이 많이 틀리는 답 : b
    sibling 경로로 이동하는 걸 체크 안한 사람들이 의외로 많았다는...
    나도 힘들게 코드를 읽어가면서 첼린지 했는데 블첼 했으면 5개 잡을수 있었을거란.. ( 만약 그랬다면 4개는 실패했겠지만 그래도 150 점.. 아까워.. ㅋㅋ )

    • helloneo 2008.06.16 09:54 신고 Permalink Modify/Delete

      디렉토리별로 같은지 다른지를 비교해야되는데.. 전체 path를 한번에 비교해서 디렉토리이름이 다른 디렉토리의 prefix인경우 잘못구한 사람이 있더라구요.. ㅎㅎ

Leave a Comment


to Top