## [SRM 446] 매치가 뭐 이래..?! (Unchallengeable Match)

오늘 새벽 1시에 열렸던 매치..
매우 피곤한 상태임에도 불고하고 지난번 SRM 445 의 복수전을 벼르고있었는데..
이상한 난이도의 문제들 덕분에 결국 삽질끝에 또다시 참패했다..
rating이 10점은 올랐으니.. 뭐 참패까지는 아니지만.. 이거 참 맘에 안드네..
250은 매우 쉬운문제가 나왔으나.. 나의 코딩 스피드 부족으로 남들에 비해 순위가 많이 쳐졌다..
500은 너무 어려운 문제가 나오고.. 흐미..
이런경우 챌 하나 성공하면 순위를 많이 끌어올릴수 있으나.. 오늘은 정말 챌 할수있는게 없었다..
우리 방에서 500점 하나 빼놓고 모든 코드가 패스해버렸다.. 챌을 시도했으면 그야말로 X 되는 매치..
물론 챌을 시도한사람도 없었다..    Level1 - CubeWalking

그림과 같은 cube의 중앙에 로봇이 서있다.. L (turn left), R (turn right), W (move forward) 명령을 여러번 수행했을때 로봇이 위치한 cell의 color 구하기

9개의 cell을 0~8 까지 번호를 매겨서 관리하고 인풋에 대해 현재의 방향과 위치에따른 처리를 if 문으로 몽땅 해결했다.. 덕분에 시간좀 걸렸다..~

x 좌표와 y 좌표를 따로 관리하면서 하면 훨씬 짧은 코드가 되었을텐데..
그러고보니.. 내가 서밋한 코드중에 140줄이 넘는 코드가 있었나.. -_-??

1 #include <iostream>
2 #include <cstdio>
3 #include <algorithm>
4 #include <vector>
5 #include <string>
6 using namespace std;
7 //#define min(x, y) ((x) > (y) ? (y) : (x))
8 //#define max(x, y) ((x) > (y) ? (x) : (y))
9 //#define INF 999999999
10
11 class CubeWalking {
12 public:
13
14 string finalPosition(string move)
15 {
16     int len;
17     int dir, pos;
18     int i;
19     char ch;
20     string res;
21     dir = 0;
22     pos = 4;
23     len = move.size();
24     for (i = 0; i < len; i++) {
25         ch = move[i];
26         if (ch == 'L') {
27             dir = dir - 1;
28             if (dir < 0)
29                 dir = 3;
30             continue;
31         }
32         else if (ch == 'R') {
33             dir = (dir + 1) % 4;
34             continue;
35         }
36         if (pos == 0) {
37             if (dir == 0) {
38                 pos = 6;
39             }
40             else if (dir == 1) {
41                 pos = 1;
42             }
43             else if (dir == 2) {
44                 pos = 3;
45             }
46             else {
47                 pos = 2;
48             }
49         }
50         else if (pos == 1) {
51             if (dir == 0)
52                 pos = 7;
53             else if (dir == 1)
54                 pos = 2;
55             else if (dir == 2)
56                 pos = 4;
57             else if (dir == 3)
58                 pos = 0;
59         }
60         else if (pos == 2) {
61             if (dir == 0)
62                 pos = 8;
63             else if (dir == 1)
64                 pos = 0;
65             else if (dir == 2)
66                 pos = 5;
67             else if (dir == 3)
68                 pos = 1;
69         }
70         else if (pos == 3) {
71             if (dir == 0)
72                 pos = 0;
73             else if (dir == 1)
74                 pos = 4;
75             else if (dir == 2)
76                 pos = 6;
77             else if (dir == 3)
78                 pos = 5;
79         }
80         else if (pos == 4) {
81             if (dir == 0)
82                 pos = 1;
83             else if (dir == 1)
84                 pos = 5;
85             else if (dir == 2)
86                 pos = 7;
87             else if (dir == 3)
88                 pos = 3;
89         }
90         else if (pos == 5) {
91             if (dir == 0)
92                 pos = 2;
93             else if (dir == 1)
94                 pos = 3;
95             else if (dir == 2)
96                 pos = 8;
97             else if (dir == 3)
98                 pos = 4;
99         }
100         else if (pos == 6) {
101             if (dir == 0)
102                 pos = 3;
103             else if (dir == 1)
104                 pos = 7;
105             else if (dir == 2)
106                 pos = 0;
107             else if (dir == 3)
108                 pos = 8;
109         }
110         else if (pos == 7) {
111             if (dir == 0)
112                 pos = 4;
113             else if (dir == 1)
114                 pos = 8;
115             else if (dir == 2)
116                 pos = 1;
117             else if (dir == 3)
118                 pos = 6;
119         }
120         else if (pos == 8) {
121             if (dir == 0)
122                 pos = 5;
123             else if (dir == 1)
124                 pos = 6;
125             else if (dir == 2)
126                 pos = 2;
127             else if (dir == 3)
128                 pos = 7;
129         }
130     }
131     if (pos == 0 || pos == 2 || pos == 6 || pos == 8)
132         res = "RED";
133     else if (pos == 4)
134         res = "GREEN";
135     else
136         res = "BLUE";
137     return res;
138 }
139
140 };

Level2 - AntOnGraph

graph 가 주어지고 각 edge 에는 score 가 주어져있다.. 0번에서 1번으로 갈때 score를 최대 많이 먹기..

단 제한이 있는데 한번 move 에 1초가 걸리는데 반드시 step 만큼 홉을 건너야한다.. 또한 limit 초 안에 1번 vertex 에 도착해야한다..

to be updated..

Level3 - CubePainting

to be updated..

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

 TopCoder SRM 450 Div 1  (0) 2009.10.19 2009.10.01 2009.09.24 2009.09.11 2009.08.19 2009.08.09 2009.07.24 2009.07.09 2009.06.14 2009.05.28 2009.05.14

1. victor5432 2009.08.09 23:48

님은 div1참가하셨나봐요
저는 div2했는데
병진인증함 ㄷㄷ 250을 뻑내고
1000포인트가 백트래킹인데 병진인증 ㅋ
500포인트가 큐브워킹인데 그건 낮은 점수를 얻고 ㄷㄷ

• 2009.08.10 00:16 신고

앗.. 처음 참가하셨나보네요..? 앞으로 아레나에서 자주 뵙겠습니다.. ㅋㅋ

2. whiteroc 2009.08.10 12:53

켁, if, case 문들.....table로 바꾸면 코드도 짧고 쉽지 않남? ㅡ,.ㅡ;;;

• 2009.08.10 20:41 신고

음.. 이건 빨리 짜는게 중요한데.. 바로떠오른 해법으로 무식하게 짜느냐.. 좀 생각해서 짧은 코드를 만드느냐.. 중에 전자를 택한거죠..~

3. whiterock 2009.08.10 23:35

흐음...재미로 해야 하는 건가 보구먼...ㅡ,.ㅡ;;; 진지하게 접근하면 안되는 거네..ㅋㅋㅋ

• 2009.08.11 09:50 신고

매우 진지하게 한거에요.. ㅋㅋㅋ