## TopCoder SRM 416 Div2

지난주 목요일 8시에 열렸던 매치.. 오랜만에 Div2에서 참여했다..
그런데 이번에도 역시 실망스런 결과.. ㅠ_ㅠ
그냥 두문제를 가볍게 풀었는데.. system test에서 fail했다..
젠장!! 거의 맞다고 생각했는데.. 뭐가 틀린것이지..
그래도 div2라서 raiting을 어느정도 유지했지 이번에 div1에서 했으면 완전 폭락할뻔했다..;;
그래도 오랜만에 챌 하나 성공했다.. 이것도 div2라서 가능한듯..
raiting은 눈꼽만큼 올랐는데.. 덕분에 다음에도 또 div2 다..;; Level1 - MostCommonLetters

문자열이 마구 주어지고, 가장 많이 나온 letter를 오름차순으로 출력하기

그냥 text를 쭉 읽으면서 나오는 letter들의 count를 1씩 증가시켰다.. 가장 많이 나오는 letter를 출력했다..

사실 이런 문제에서 시간을 낭비하면 안되는데.. 이정도 문제에 224점이면 케 안습이다.. 흠.. 요즘들어 코딩 속도가 안나온다.. 나이를 먹어서인지 순발력이 계속 떨어진다.. ㅠ_ㅠ

1 #include <iostream>
2 #include <cstdio>
3 #include <algorithm>
4 #include <vector>
5 #include <string>
6 #include <set>
7 using namespace std;
8 #define max(x, y) ((x) > (y) ? (x) : (y))
9
10 class MostCommonLetters {
11 public:
12
13 string listMostCommon(vector <string> text)
14 {
15     char buf;
16     int size, max1, len;
17     int i, j;
18     int ch_cnt;
19     string res;
20     size = text.size();
21     for (i = 0; i < size; i++) {
22         strcpy(buf[i], text[i].c_str());
23     }
24     memset(ch_cnt, 0, sizeof(ch_cnt));
25     max1 = 0;
26     for (i = 0; i < size; i++) {
27         len = strlen(buf[i]);
28         for (j = 0; j < len; j++) {
29             if (buf[i][j] == ' ')
30                 continue;
31             ch_cnt[buf[i][j]]++;
32             max1 = max(max1, ch_cnt[buf[i][j]]);
33         }
34     }
35     res = "";
36     for (i = 'a'; i <= 'z'; i++) {
37 printf("ch_cnt[%c] = %d\n", i, ch_cnt[i]);
38         if (ch_cnt[i] == max1) {
39             res += (char)i;
40         }
41     }
42     return res;
43 }
44
45 };

Level2 - NextNumber

input으로 N이 주어지고, N보다 큰 수 중에서 이진수로 나타냈을 때 1의 개수가, N을 이진수로 나타냈을때의 1의 개수와 같은 가장 작은 수 구하기

이 문제는 N을 2진수 string으로 변환 후 next permutation을 구하면 된다.. 젠장!!
petr나 기타 많은 사람들은 pattern을 찾아서 구했다.. 뒤에서부터 읽어서 "01" pattern을 찾은 후
10으로 바꾸고.. 나머지는 어쩌고 저쩌고.. 나도 비스무리하게 했는데.. 생각을 잘못했다.. ㅠ_ㅠ

1 #include <iostream>
2 #include <cstdio>
3 #include <algorithm>
4 #include <vector>
5 #include <string>
6 #include <set>
7 using namespace std;
8 #define max(x, y) ((x) > (y) ? (x) : (y))
9
10 class NextNumber {
11 public:
12
13 int getNextNumber(int N)
14 {
15     int i, j;
16     int bit_cnt;
17     int bit, temp;
18     int res;
19     bit_cnt = 0;
20     while (N > 0) {
21         if (N % 2 == 0) {
22             temp[bit_cnt++] = 0;
23         }
24         else {
25             temp[bit_cnt++] = 1;
26         }
27         N /= 2;
28     }
29     temp[bit_cnt++] = 0;
30     for (i = 0, j = bit_cnt-1; i < bit_cnt; i++, j--) {
31         bit[i] = temp[j];
32     }
33     next_permutation(bit, bit+bit_cnt);
34     res = 0;
35     for (i = 0; i < bit_cnt; i++) {
36         res *= 2;
37         res += bit[i];
38     }
39     return res;
40 }
41
42 };

Level3 - DancingCouples

to be updated..

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

 TopCoder SRM 422 Div 1  (4) 2008.10.19 2008.10.12 2008.10.03 2008.09.21 2008.09.13 2008.09.07 2008.08.17 2008.08.08 2008.08.01 2008.07.20 2008.07.11