Smart != Think Hard

SMART != THINK HARD && SMART = THINK EASILY
SO, THINK EVERYTHING EASILY

hari kamis yang lalu tepatnya tanggal 22 Mei 2008, diadakan seleksi untuk memilih ‘the next idol’ programmer yang akan didaftarkan dalam lomba programming ACM ICPC 2008 di BiNus. yang membuat soal dan melakukan penjurian adalah pak Taufiq E, M.Sc. beliau ini adalah salah satu dosen favorit gw yang dengan ikhlas mau membimbing teman-teman dalam mempersiapkan diri dalam perlombaan ini.
Dalam seleksi ini ternyata ‘hanya’ diikuti oleh 15 orang, 14 orang dari TI dan 1 orang dari Matematika. lantas mana orang SI, anak ekstensi dan TI/SI Internationalnya? inilah yang membuat gw terbebani…gw ngerasa gak enak..kesannya jadi TI aja yang diundang..padahal gw udah mengumumkan juga ke anak2 SI dan TI/SI Int’, tapi kalo anak Ekstensi gw akui sebagai kesalahan gw karena tidak ngasih pengumuman ke Ekstensi…tapi ‘sueeer’ itu gak sengaja…dan soalnya gw yang mengumumkan dan mengkoordinir adanya seleksi ini…yaudah langsung aja ke intinya…
saat seleksi ada 4 soal yang diberikan kepada para peserta untuk dikerjakan…waktunya 90 menit….langsung aku lihat soalnya….kurasa cukup mudah…soalnya agak ‘berbeda’ dengan soal ACM yang biasa aku kerjakan…aku langsung mengerjakan soal ke2..dan accepted..lalu soal ke3…dan accepted…lalu soal ke1…dan accepted juga. wah…bisa ‘kelar’ cepat dech..pikirku…ternyata di soal ke4…aku mulai berpikir keras…penasaran ya…apa sich soalnya?
ini soalnya : BITS (Binary digits) adalah bilangan berbasis dua. tolong masukkan beberapa BITS, lalu urutkan secara ascending (dari bilangan terkecil ke terbesar).
contoh input :
3
110
10
1010

contoh output :
10
110
1010

kalau dipikir algoritmanya cukup mudah, tinggal dikonversi dari BITS ke desimal, lalu baru disorting. tapi sejujurnya aku belum pernah membuat program konversi semacam ini, inilah yang membuat aku agak lama mengerjakannya. saat aku sedang mengerjakan ini, pak Taufiq melihat pengerjaanku…dia bilang kepadaku bahwa aku terlalu berpikir sulit / rumit, padahal ada cara yang lebih mudah dari yang aku lakukan, itulah yang membuatku makin bingung, padahal aku pikir caraku ini sudah benar, mudah dan sesuai aturan…akhirnya ‘dengan perjuangan’ yang melelahkan..programnya sudah selesai…
ini source codenya :

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>

int count_bits(char bit[20]){
int count,pangkat=0,total=0,temp;

count = strlen(bit); // menghitung panjang string BITS
for(int i=count-1;i>=0;i–){ // melakukan pengecheckan secara mundur

temp = bit[i];
if(temp==’1′){ // mengecheck apakah 1 (BITS hanya terdapat bilangan 1 dan 0)
total = total + pow(2,pangkat);
}
pangkat++;
}
return total;
}

int main(){

int n,i,x;
char bits[20][20],temp[20];
scanf(“%d\n”,&n);
for(i=0;i<n;i++){
gets(bits[i]);
}

//nested for dibawah ini adalah teknik bubble sort
for(i=0;i<n;i++){
for(x=0;x<(n-1);x++){
if(count_bits(bits[x])>count_bits(bits[x+1])){
strcpy(temp,bits[x]);
strcpy(bits[x],bits[x+1]);
strcpy(bits[x+1],temp);
}
}
}
for(i=0;i<n;i++){
printf(“%s\n”,bits[i]);
}

return 0;
}

BITS yang dimasukkan aku anggap sebagai string, lalu dengan fungsi count_bits yang aku buat akan menghitung / mengkonversi BITS yang dalam string itu menjadi bilangan desimal. lalu barulah aku sorting dengan teknik bubble sort…dan baru tampilkan..
tapi tetap saja kata2 pak Taufiq itu membuatku penasaran…cara apa ya….
tapi aku coba berpikir dan berpikir lagi…dan yang ada dipikiranku adalah cara yang lebih mudah dan aku punya ide, bagaimana kalo langsung saja dianggap sebagai integer, tanpa menganggapnya lagi sebagai string, sehingga tidak lagi memerlukan konversi yang seperti aku lakukan. inilah optimasi dari langkah sebelumnya, yaitu input langsung saja berupa integer / long lalu langsung saja disorting (tanpa perlu dikonversi karena sudah berupa integer). dan ternyata benar…inilah cara yang lebih mudah yang dimaksud pak Taufiq. Beliau mengatakan, inilah sifat dari suatu bilangan, semakin besar nilai suatu bilangan, semakin panjang atau besar pula bilangan tersebut. contoh : 1000 (basis 2 = 8 utk basis 10) pasti lebih besar / panjang dari 100 (basis 2 = 4 utk basis 10). dan ini berlaku untuk semua jenis bilangan. tetapi khusus untuk permasalahan bilangan biner (BITS), oktal, maupun desimal, tidak perlu lagi melakukan konversi. langsung saja diinputkan sebagai integer / long. berikut penyelesaian untuk problem 4.

#include<stdio.h>

int main(){

int n,i,x;
long bits[20],temp[20];
scanf(“%d\n”,&n);
for(i=0;i<n;i++){
scanf(“%ld”,&bits[i]);
}

//nested for dibawah ini adalah teknik bubble sort
for(i=0;i<n;i++){
for(x=0;x<(n-1);x++){
if(bits[x]>bits[x+1]){
temp=bits[x];
bits[x]=bits[x+1];
bits[x+1]=temp;
}
}
}
for(i=0;i<n;i++){
printf(“%ld\n”,bits[i]);
}

return 0;
}

sekian!!! sampai jumpa lagi pada tulisan gw yang lain.

3 Responses so far »

  1. 1

    Kurniady said,

    Sortingnya bisa langsung pakai library saja.
    #include
    using namespace std;

    sort(bits, bits+n);
    😀

    -Kurniady

  2. 2

    Felix J said,

    Aloo… ada orangnya kah?🙂 sepertinya dah lama gk di update blognya…

  3. 3

    brainplusplus said,

    to Kurniady : thanks infonya…waktu itu aku gak tau cara make STL..sekarang mendingan🙂

    to Felix J : he…he…aku memang jarang ngeblog nich..tapi masih ada hasrat untuk ngeblog lagi…🙂


Comment RSS · TrackBack URI

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: