요즘 계속 DIV2에서 놀고있다.. 한번 떨어지고나니 계속 못올라가고있다..
문제를 천천히푸는 나는 최소한 두문제는 풀어야하는데.. 열라 구린문제들만 나온다..
이번에도 쉬운문제인데도 불구하고 이해를 못해서 결국 못풀었다.. 젠장..!
SRM 끝나고나서 다시보니 이해가 됐다.. ㅠ_ㅠ
DIV2의 경우 통상 두문제정도는 쉬운데 항상 말리면서 제대로 못풀고있다.. 운도 안따르는것같다..
이번에는 두문제를 푼사람이 1명밖에없었고.. easy를 얼마나 빨리 풀었느냐에따라 등수가 갈렸다..
나도 남들처럼 코딩이 빨라야되는데.. ㅠ_ㅠ

방 10등 전체 304등..

사용자 삽입 이미지



[250] DietPlan
주어진 음식에대해서 아침에 먹고 점심에 먹고 남은것을 저녁에 다 먹어야한다.. 저녁에 먹어야하는 음식들을 sort해서 출력하기.. 단 diet list에 없는 음식을 먹은경우 CHEATER를 출력..

쉬운문제였다.. 'A'부터 'Z'까지 커버하는 배열을 잡아놓고 먹은것에대해 marking하는 방법으로 풀었다..
남들보다 한참 늦게 풀었는데.. 이제 코딩 속도도 높이도록 노력해야겠다..

      1 #include <iostream>
      2 #include <cstdio>
      3 #include <algorithm>
      4 #include <vector>
      5 #include <string>
      6 using namespace std;
      7
      8 class DietPlan {
      9 public:
     10
     11 string chooseDinner(string diet, string breakfast, string lunch)
     12 {
     13     char check[128];
     14     char buf[128];
     15     int i, j;
     16     string ret;
     17
     18     memset(check, 0, sizeof(check));
     19     strcpy(buf, diet.c_str());
     20     for (i = 0; i < strlen(buf); i++) {
     21         check[(int)buf[i]]++;
     22     }
     23     strcpy(buf, breakfast.c_str());
     24     for (i = 0; i < strlen(buf); i++) {
     25         if (check[buf[i]] == 0) {
     26             return "CHEATER";
     27         }
     28         check[buf[i]]--;
     29     }
     30     strcpy(buf, lunch.c_str());
     31     for (i = 0; i < strlen(buf); i++) {
     32         if (check[buf[i]] == 0) {
     33             return "CHEATER";
     34         }
     35         check[buf[i]]--;
     36     }
     37     j = 0;
     38     for (i = 'A'; i <= 'Z'; i++) {
     39         if (check[i] == 1) {
     40             buf[j] = i;
     41             j++;
     42         }
     43     }
     44     buf[j] = 0;
     45     ret = buf;
     46     return ret;
     47 }
     48
     49 };




[500] RoadConstruction 1. 같은 차선에서는 앞에있는 차가 먼저 나간다..
2. 위에있는 차선의 차가 먼저 나간다..
3. 위에있는 차선의 차는 반드시 한번 밑에있는 차에게 양보해야한다.

이런 조건을 만족할 때 'D' 번 차 이전에 몇개의 차가 빠져나가는지 구하는 문제..

그냥 simulation 하면 된다.. 컨테스트 도중 마지막 케이스가 이해가 안되서 30분동안 이해해보려고 삽질했었다..
컨테스트 끝나고 알아냈는데.. C -> I -> W -> T -> A -> D 순이다..

그냥 simulation 했다.. 문제 이해만 하면 쉬운문제.. -_-

  1 #include <iostream>
  2 #include <cstdio>
  3 #include <algorithm>
  4 #include <vector>
  5 #include <string>
  6 using namespace std;
  7
  8 class RoadConstruction {
  9 public:
 10
 11 int getExitTime(vector<string> currentLanes)
 12 {
 13     int n;
 14     int i, last, cnt;
 15     int pos[100], len[100];
 16     char lane[100][100];
 17     char check[100][100];
 18     n = currentLanes.size();
 19     for (i = 0; i < n; i++) {
 20         strcpy(lane[i], currentLanes[i].c_str());
 21     }
 22     for (i = 0; i < n; i++) {
 23         pos[i] = 0;
 24         len[i] = strlen(lane[i]);
 25     }
 26     memset(check, 0, sizeof(check));
 27     cnt = 0;
 28     while (1) {
 29         last = -1;
 30         for (i = 0; i < n; i++) {
 31             if (pos[i] >= len[i])
 32                 continue;
 33             if (check[i][pos[i]] == 1) {
 34                 break;
 35             }
 36             check[i][pos[i]] = 1;
 37             last = i;
 38         }
 39         if (i < n) {
 40             printf("%c exit\n", lane[i][pos[i]]);
 41             if (lane[i][pos[i]] == 'D')
 42                 break;
 43             cnt++;
 44             pos[i]++;
 45         }
 46         else if (i == n) {
 47             printf("%c exit\n", lane[last][pos[last]]);
 48             if (lane[last][pos[last]] == 'D')
 49                 break;
 50             cnt++;
 51             pos[last]++;
 52         }
 53     }
 54     return cnt;
 55 }
 56
 57 };



[1000] RainyDay Y 가 현재 있는 위치이고 H까지 이동해야 한다.. C는 covered되서 비에 맞지 않는지역이다..
비를 최소한 안맞고 가는 방법을 찾는다.. 단 중간에 멈춰서 임의의 시간을 쉴 수 있다..
'R'은 비오는 지역, '.' 은 비가 안오는 지역이고.. 이 정보는 1분마다 옆으로 한칸씩 shift한다..

이 문제는 DP로 풀 수 있을듯 하다..  dp[i][j] = 'i 칸에서 j번째 쉬프트에서 이동할때 비에맞는 최소값' 을 저장하면서 풀면 되려나..? -_-?? 음.. 코딩해봐야되는데 귀찮다.. ㅠ_ㅠ 이러니 실력이 안늘지.. ㅠ_ㅠ;;
소스를 보니 BFS로 푼 사람도 있다..

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

TopCoder SRM 379 Div2 (완료)  (0) 2007.11.29
TopCoder SRM378 DIV2 (완료)  (0) 2007.11.21
TopCoder SRM375 DIV2 (Complete)  (6) 2007.11.11
TopCoder SRM374 DIV2  (3) 2007.11.07
TopCoder SRM 373 Div 2  (0) 2007.10.24
TopCoder SRM 371 Div2 (완료)  (2) 2007.10.14
TopCoder SRM 370 Div2  (0) 2007.10.14
TopCoder SRM369 DIV2  (6) 2007.10.05
TopCoder SRM 368 Div 1  (0) 2007.10.03
TopCoder SRM 367 Div 2 (완료)  (10) 2007.09.27

to Top