Append and Delete (hackerrank)
빈 문자열에 지우는 것이 legit하다는 희안한 논리를 갖고 있는 문제. 결과 예시를 읽지 않았다면 왜 이러나 하고 당황할 수도 있다.
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
// Complete the appendAndDelete function below. string appendAndDelete(string s, string t, int k) { array<string, 2> arrStr = {"No", "Yes"}; unsigned ret = 0; unsigned sizeS = s.size(), sizeT = t.size(), sizeCommon = 0; unsigned sizeLess = sizeS > sizeT ? sizeT : sizeS; for(unsigned i = 0; i < sizeLess; i++) { if(s.at(i) != t.at(i) || i + 1 == sizeLess) { sizeCommon = i; break; } } unsigned minimumStep = sizeS + sizeT - (sizeCommon << 1); if(k >= minimumStep) { ret = 1; if( ((minimumStep - k) & 1) && (k < sizeS + sizeT) ) { ret = 0; } } return arrStr.at(ret); } |