# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
149102 | 2019-09-01T05:44:55 Z | 티셔츠 콜렉터(#3632, yoni, jisunchae, jsg1504) | HicCup (FXCUP4_hiccup) | C++17 | 0 ms | 0 KB |
#include "hiccup.h" #include "algorithm" int maximumHiccup (int* levelCountArray, int level) { if (levelCountArray[level] == 0) { return 0; } else { int childHiccup = maximumHiccup(levelCountArray, level + 1); if (childHiccup % 2 == 0) { return max(childHiccup, levelCountArray[level]); } else { return 0; } } } int HicCup(std::string S) { int N = S.size(); int levelArray[N] = {-1}; int level = 1; int firstCharacterIndex = 0; char previousCharacter = ' '; // 첫번째 캐릭터 찾는 루프 for (int index = 0; index < N; index++) { if (S[index] != '!') { previousCharacter = S[index]; levelArray[index] = 1; firstCharacterIndex = index; break; } levelArray[index] = -1; } // 나머지 루프 for (int index = firstCharacterIndex + 1; index < N; index++) { if (S[index] == '!') { levelArray[index] = -1; continue; } if (previousCharacter != S[index]) { levelArray[index] = level; } if (previousCharacter == S[index]) { if (previousCharacter == 'H') levelArray[index] = ++level; if (previousCharacter == 'C') levelArray[index] = --level; } previousCharacter = S[index]; } int levelCountArray[N] = {0}; // for(int i=0; i<N; i++) { // cout << levelArray[i] << ' '; // } for (int i= 0; i < N ; i++){ if (levelArray[i] != -1) levelCountArray[levelArray[i]]++; } int max = maximumHiccup(levelCountArray, 1); if (max % 2 > 0) { return max; } else { return -1; } }