[뻘글] 다중for문을 for문 하나로 해결보기...

Scarecrow의 이미지

http://kldp.org/node/99915 에 뻘플로 첫플을 누리는 기쁨을 누리긴 했습니다만...

저도 진지한 리플을 달기 위해 나름 생각해 보았는데...
그 결과 본 뻘글이 완성되었습니다.

for(int i = 1; i < 5; ++i) {
    for(int j = 2; j < 5; ++j) {
        for(int k = 3; k < 5; ++k) {
            cout << i*100 + j*10 + k << ", ";
        }
        cout << "Hmm..." << "; ";
    }
    cout << "Oh!!" << endl;
}
for(int i = 1; i < 5; ++i) {
    for(int j = 2, k = 3; j < 5;) {
        if(k < 5) {
            cout << i*100 + j*10 + k << ", ";
            ++k;
        } else {
            cout << "Hmm..." << "; ";
            ++j; k = 3;
        }
    }
    cout << "Oh!!" << endl;
}
for(int i = 1, j = 2, k = 3; i < 5;) {
    if(j < 5) {
        if(k < 5) {
            cout << i*100 + j*10 + k << ", ";
            ++k;
        } else {
            cout << "Hmm..." << "; ";
            ++j; k = 3;
        }
    } else {
        cout << "Oh!!" << endl;
        ++i; j = 2; k = 3;
    }
}
위의 세가지는 동일합니다.
즉 3중for문도 for문 하나로 해결됩니다.

4중, 5중 그이상도 가능할겁니다.
그냥 다음과 같은 변환을 따르면 됩니다.

for( A1; B1; C1 ) {
    for( A2; B2; C2 ) {
        [Block 2];
    }
    [Block 1];
}
for( A1, A2; B1; ) {
    if( B2 ) {
        [Block 2];
        C2;
    } else {
        [Block 1];
        C1; A2;
    }
}

세줄요약: 이 변환에서 for문을 하나로 줄였다고 해서 생기는 장점은 하나 없구요...
수행시간은 변환전후 100% 동일합니다. ^^
전혀 최적화가 아니라능~

한단어 요약: 뻘짓