|| [[TableOfContents]] || == 3번. == === ì €ê¸€ë§ ë°©ì‹ (JugglingAction) === * [Leonardong]ì´ ìž‘ì„±í•œ 코드 * ì´ 4시간 8분 걸림 {{{~cpp #include <iostream> #include <string> using namespace std; string roll( string str,int n, int i ); int getGcd(int aN, int aM); void main() { string str = "abcdefg"; int n = str.length(); int i; cout << "current : " << str << endl << "shitf amount? : "; cin >> i; cout << "after shifting : " << roll(str, n, i) << endl; } string roll( string str, int n, int i ) { if ( i % n != 0 ) i %= n; int gcd = getGcd(n, i); char temp; // for ( int count = 0 ; count * gcd < i ; count ++ ) for ( int count = 0 ; count < i ; count += gcd) for ( int tag = 0 ; tag < gcd ; tag++ ){ temp = str[tag]; for ( int base = tag ; base + gcd < n ; base += gcd) str[base] = str[base + gcd]; str[base] = temp; } return str; } int getGcd(int aN, int aM) { //assert aN > aM int remain; do{ remain = aN % aM; aN = aM; aM = remain; }while( remain != 0 ); return aN; } }}} * 작성한 후 ì €ìž¥ê³µê°„ì„ í•˜ë‚˜ë¼ë„ 줄ì´ë ¤ê³ 변수를 최대한 안 ì“°ë ¤ê³ ë…¸ë ¥í–ˆë‹¤. ì‹ì´ 복잡해졌다. 간단한 임시변수는 ì¨ì¤˜ì•¼ ê² ë‹¤. 시프트를 ì¼ë°˜í™”시켜서 ìƒê°í•˜ê³ ë¬¸ì œì— ì ‘ê·¼í–ˆë‹¤. 하지만 풀리지 않았다. ì±…ì„ ë‹¤ì‹œ ì½ê³ , ê·¸ë¦¼ì„ ë´ì„œ ë¬´ì—‡ì„ ìž˜ 못 ì´í•´í–ˆëŠ”지 ì‚´íˆë‹¤. 하지만 잘못 ì´í•´í•œ ë¶€ë¶„ì€ ì—†ì—ˆë‹¤. ì‹œê°„ì´ ì§€ë‚˜ê³ , ë¬¸ì œë¥¼ 다시 ì½ìœ¼ë©´ 힌트를 얻지 ì•Šì„까 하는 ìƒê°ì— ë¬¸ì œë¥¼ ì½ì—ˆë‹¤. ë¬¸ì œì—ì„œ 최대공약수ë¼ëŠ” ë§ì„ ì‹ ê²½ì“°ì§€ 않았다는 ì ì„ ë°œê²¬í–ˆë‹¤. 최대공약수를 ì´ìš©í•´ì„œ ê²°êµ ë¬¸ì œë¥¼ 해결했다. 안 ë˜ëŠ” ë°©ì‹ì— 매달리다 보니 슬슬 ë‹µë‹µí•˜ê³ ì§œì¦ì´ 났다. ë”ê°€ 아니다는 ìƒê°ì´ ìžê¾¸ 들었다. í¬ê²ŒëŠ” ê°™ì€ ì•Œê³ ë¦¬ì¦˜ë„ ë‹¤ë¥¸ ë°©ì‹ìœ¼ë¡œ ì ‘ê·¼ í• ìˆ˜ 있다. 막힌다는 ëŠë‚Œì´ 들면, ë¬¸ì œë¥¼ 다시 ì´í•´í•´ë³¸ë‹¤. HowToSolveItì—ì„œ ë‚˜ì™”ë˜ ë°œì œë¥¼ 스스로 해본다. ì´ë²ˆì—는 ë¹¼ë¨¹ê³ ë„˜ì–´ê°„ ì¡°ê±´ì´ìžˆëŠ”ê°€?ë¼ëŠ” ë°œì œë¥¼ 빨리 í–ˆë”ë¼ë©´ í•´ê²° í• ìˆ˜ ìžˆì—ˆì„ ê²ƒì´ë‹¤. === ì†ë’¤ì§‘기 ë°©ì‹ === * [Leonardong]ê³¼ [í™©ìž¬ì„ ]ì˜ PairProgramming * 30분 걸림 {{{~cpp #include <iostream> #include <string> using namespace std; void reverse(string & str, int start, int end); void main() { string str = "abcdefgh"; int n = str.size(); int i = 3; //shift amount int start, end; start = 0; end = i-1; reverse( str, start, end); start = i; end = n-1; reverse( str, start, end); start = 0; end = n-1; reverse( str, start, end); cout << str << endl; } void reverse(string & str, int front, int rear) { char temp; while( front < rear ){ temp = str[front]; str[front] = str[rear]; str[rear] = temp; front++; rear--; } } }}} === ì•Œê³ ë¦¬ì¦˜2 === 미해결 32m소요 {{{~cpp #include <iostream> #include <string> using namespace std; void swap(string & str, int start1, int end1, int start2, int end2){ if ( end1 - start1 == end2 - start2){ char temp; int limit = end1 - start1 + 1; for ( int i = 0 ; i < limit ; i++){ temp = str[start1]; str[start1] = str[start2]; str[start2] = temp; start1++; start2++; } } } int main() { string str= "abcdefg"; int n = str.size(); int i = 3; // abc defg swap(str,0,i-1, n-i, n-1); // swap(str, 0, i-1, n - i, n-1); // swap(str, 0, i-1, i, n-i); cout << str << endl; return 0; } }}} == 후기 == í™©ìž¬ì„ ë‹¤ì†Œ ì—¬ìœ ë¥¼ ê°€ì§€ê³ PairProgramming ì„ í–ˆë‹¤. í˜¼ìž í• ë•Œë³´ë‹¤ ë¬¸ì œ íŒŒì•…ì´ ìž˜ ë˜ì—ˆê³ ë”ê°€ íƒ íŠ¸ì¸ ëŠë‚Œì´ 들었다. 아쉬운 ì ì´ë¼ë©´ ë¬¸ì œ í•´ê²°ì— ë„ˆë¬´ ë§¤ë‹¬ë ¤ì„œ ë¦¬íŽ™í† ë§ì„ 게ì„리한 ê²°ê³¼ ìš°ì•„í•œ í”„ë¡œê·¸ëž¨ì„ ì™„ì„±í•˜ì§€ 못했다. 늘 ê·¸ë ‡ë“¯ì´ ì—í• ì— ë§žëŠ” 변수명 붙ì´ê¸°ëŠ” ì–´ë µë‹¤. 짧았지만 í¥ë¯¸ì§„진한 시간ì´ì—ˆë‹¤. ---- [PPProject]