2016년 3월 24일 목요일

yum --nogpgcheck

if yum update or install halts with '~ package is not signed' error, try this option.
for example,
yum --nogpgcheck update 

2016년 3월 22일 화요일

Reverse Shuffle Merge

심심풀이로 가끔 가서 노는 사이트. top coder의 easy version쯤 된다.
https://www.hackerrank.com/challenges/reverse-shuffle-merge

아직 어려운 문제들을 많이 접해보지 못해서 그런데, 이 문제가 지금까지 해본 것들중에 가장 시간을 많이 잡아먹은것 같다. 선수들은 이런거 10~20분에 끝날텐데. 답안 보고 좀 더 생각해봐야겠다.

테스트 케이스 세개. 문제 / 답 순서.
bdabaceadaedaaaeaecdeadababdbeaeeacacaba
aaaaaabaaceededecbdb
djjcddjggbiigjhfghehhbgdigjicafgjcehhfgifadihiajgciagicdahcbajjbhifjiaajigdgdfhdiijjgaiejgegbbiigida
aaaaabccigicgjihidfiejfijgidgbhhehgfhjgiibggjddjjd
cttpuwqslbtttyukcoorjbootbyrsktwxwmqtwrqrwqwctktuwtjtblwrujywyoyolkusucjuoyowswotckwultobwpwyuqymyuqxouuwuxwboqwykjuwjuukmkuytuquyubtpcytoqsyctwwtwrswptrroktmcwpstttblpuylsljmwjyqwtptktbjotqttyybyybyywlwtlyyxtqobttcuwxylswtytrcoytwtbuowkruoystqyyptwuuxykwljsuyutyboxwsutouruublwxowmomwmuoruwmbcustubtmmutswqtlmxuoyurumuwurpqsrwbltcoopyuckrbkctcqotwboxmjskcttwwrwlqptttlsuuymwuuucytytkmwutytlcojwswqlytyjwluwouuwcuowttoorwojuqwytsokwxtmtkoxtkwujsujcotbjwwutymwcmkoptwstywtwktowwwwutyckukwcjortwltocjpwwqtmmwjtwwpmwmbotsjulllmjsxwtlrpbkytwqttjuoowkuctqtwruowuwocwlyxylkroluysyktrmbtwwwkoswctojubrywpsxswqtptwcsbpmwourutttsluoocjwbcutwoptpcwjtpyubwtktuoytwytukrwtpuoktslxbspwymmuuuosluywtoyttwyujottrorcwtyywwwmtykyuytrwbwyoywtywrbpjwrkymlrwktwmwjrtwttwwwycswwuxsywrtutbptsowcucxuowuuwtrytuywxwtwuwcwlttqurottykbbwlbcxttoctwbxrurbxcrtqsyyucytwxpcuwywbbwskobwwjqjtsttsocwwxuryjputpwktjkoutyukywqywkspwopuroybqtyyokywultwmwomwxttbwwcutxoycotbptsttbwtwqutywjlxbpoplywljkqkwxttooqwwxtbtbccmbsocuuuptjultbowkuwpuspruqtoupltwmoutlyjjjqkxlwptctwwywtwjbcmuwkbltwyuormsuwtwxpxkkycspjjpmokuytbcowxxpuwwtxottjqpotwoxxwkwqwwswtwlowryplsoctstyorywyrlyrlltuyqtmowjpxtkttkowmtuttbolwpouwtxwwupucuuujckubwkuywkswkxuuybpsckuworqupqktujywwcywtuttbccottpuywkbukuwmjtsputkyjyrmwusllcbttlusmwwymybqwokspbolspokuwwwotrbwtwtopqpolsqrwkwtjottputboptuurlotxsttyywcktyymltmywobwwtpooqtopcbktbxcuwtxuuyyywulcqwxqywtkckutrtsttxtkyoccumttuwsumutrwryqwxktyjoxbtcuwmpjcqcwpxmwlumucstwykxoquylwxtuypwytkwkyltmtybsbywrwltytutyuruumumulpytouwttbuxtrlwkrowwywtywtjotbbosjwtutctuxutjbopywjturtqotubjwcwwtuymtyypxtyouubpjuotowsbcoowkwrwutwyuprltwuoquowurujtusutuwywtkpbwjoytcouyscbllrcoowmwbttywwwubpxptmstwtwwrutlmywmtbyucyujywqtjuxoltkwlsmuylwjktobwutyrpoxtwuytuuqclytutswwkcwoytuuywqrlyywsquypkltskwuoctmwwwwttwrtttuctcpwtkmjuqyouuoutjusuusuctwytkwcccuyylyluwxtocttrotywybwwmlokywtywurpocyttcrtpwwrqctwoxtrupoujqyutsqxtssurtyoqwuupwwyowtyutywtqyowjwwyukmqwuctjmtouuttwytwsxtlrurxotrttupswttjustwswtjxscjtusywwswkwpxkkcykluwyuruqtwwuwuutsubctmuprobjswmbstuqjytuytrtlbsytupubjyswrmoyowjwywxolqxukuwtxkktouccuomwptwtuctutwprubswcxscwcmcostwwttrumtoytowwulotwsqujrmopubuusuuwxwqwwlmyyttttklbtxoxwxttjwmwtumtptwlbuouowpswcytotropsuwwtmwuyutkryrwwtyxuyyyywwwyuttwucutcctwwtjjtxtmwttwoubtcsytwucwsbupttutjwwtxwutmwqttowwuxsbokkmujtwwuctwptytuwwowpwwoxoowtjutwruttcwwmbwowttplttbpubxlyuojwurwxptrjttwuyqttyuttstwotbywuwymtottptlsrbxjutbubtypwbcttjswuwywwutklttxwttttyukqpttykjtcwwpyxuxyopsswmxbyyulwuctokouwwkyowcwcwmsrojmswwbyokwyywcuwlxoymsrbbruotwotcwuqtwuqwqyuuytbsowbwlubyywxkwupuyosoxmsuqsyucqctwmpokstwtcrwytuuwjmupwtoowtycuockpxsypstktyttxkltycbpsrwwtuxqpommwwwtkmwsjmubuquccwwslwtwotjtwwtukowomojbwubwttptoowtubrbwrycxcpotttwjpooutuowbotuwuwjysuwsjlbtcstwbbwpobuyxstyjuxtjrutjtuuwustorprjuwbwsttkwuuwwwpmjcuctlowkxwwmttwtwxqmywusmyorjtptwoyswwqbpywkwkyxttocmcwujtqcrubskqjtoujouyuwtpmucutupcqttjymtbywtpyytotcluwutkyljmpqyowupsuxmuusjtkwwcqstjqwwruttcbttcptctowtomtuojoywutuktwwwoortpmxubljumwslocurlwttooustwyqptylytpmxukwytxrojltubtuusyttutssmkwyqojtrjquotwtwwppwwmctwytyytwtclkworwwbtusryuwowkostwwwwwwmxowbmoltutystxmpwwttttltyqxoybbutmotwqqutxprkmoyomqbjtttuupmjlpmwwxsstcottrwttlrwwptsybywtobwotoxxybowxurwroqcsyrpoqwuwuttutrmwwytwxuwkutbrtmmuosywobtuctcuxpwcxqsuowutusmywsbmttsyuuuuuttttwjtopytljomywtotytuuwsoyjkwlooowlyxxtopyyuwyutctjukubyqxpurwbkurwyrpswmktuubxooyqktcboucsywolkwoqoymtjktwoqrourxubuwwywlwujjwwwqwpyxuwrykujlutqocmwltpcmxstoxklqtutsotoxyututwtwtwwrwysumupyrwxlwwmwslslwboxwtbtlpwlxyqlttjubptmytmwbsoyuwjtttwlwpryumxkpcowkujowtltywuolwwotyutucysuqltttwjutoucowtpttwtwltjsostwwoktkwtwtptwrtyjobtutqrwwqtyqtuwyomttmymkqtrrjtwtyuxtxlutotpwyjwsojwtmpstrooowwocrwywyxpocuktmoylupstrpccooptucmtybwxowwuruulpywqpwkqtowswtttcromumuwbkwctpckqbyjttwrjbtxpwpwwjtcmwtuwcbxcxyuqttsxjtpulumwptoxmxyqybwcjpkuwcoxcbwtcowypttuquuosyurucbtywykwtouwtrskbltuwtjybtmquytjyxtkucscuwulwjxwbbwotswpqqkrpybuwwumtpoxlwykqurqcukrmutucctowytwtbpxwbjojkqwuyklwttytupqwopoqyyqmoybutbwuywujwqbowwlywmwwwumbcwbytusortwwuqmqbulwtkouqmutotstomwmbylwrkowwusrqcyboouwwklytowxwkttsrwootqxwswtsjwlolqobtucwpqwotpuqkwjtlcucwjjtcmkkxurybukqtybjjxuwttquswytojtwbytxwubuttuwtwswlwytmtquywtuuwupmwubqtuuxctottkojqbtxbuyqwsquutoqwctwwuwrwomtwowttuwsywuykuttwruoppwumutltwttwstusxuyqotypujtxwtuwukqtmmtuuywuctqyrttptpytbloplsmtuctmryoctqmtuwtoytmwtuopjkwtutckckswswowoutulxjwlosylyjuutttjcwuwousrowttwlwuxqqobmtwmcttwyuxubryjkoouossyjpoqrxrtrmtrsotbyplwrwtcypmqcttousypyrokscyjropxwtputjwyylobttwouuustqtrcwowysottptyoktuwspkujubyrtwtqutwqsbkuuccyjlmltblrtyqwxtuxbukmuoptojwcrtsocbywcttulmtukjqtsuswwuyuttrkywuwqqcpcruymkxoltyxwrsqcuotkwkwtroclumrxyulcosrwowutouqxttlwolkkquqtrouuuxswuwtotypulrkurltuomwubpymkwuttuwtwywpouoswtkluytttywutwwwytwumxpktquoutrotbbttuxptuouqwwmtutuussuttspruwouyolxqwtpyxmlylcwwrlktypwtulwwyqywjpluoswpyqtmpttouptstwxurtruwpjojlwtwqtsctoutsswyuxpxbtwwotyjouubwwuttbkuocootswcktqbukcbywutjwwmwukrljwyxwkqwlowmkwkpcmumtqwowkytlrwycyuwtcbyutrxrowtstytckqyubttotltkmcysuskrbtucttxwluulsttjutcjskmwklrymwutcuustxkwmyycbqjlquwmqwjwutwuwutwusosclkxtktjompkoputtobqwmlqljxltuojptkcwmcqpttoyjuuosltwloubrjwjttjtwttuwuoctsttowwwwjybytqmoqytwrtctswworbtjruluyoktlwtswtrwyjxtjtttobtpouuyutlqcotslrcwmkbwjtstwxospqjtlbkuujouoowtcywwuwjtpqjutwtotbqcwytbswuubtuuwbbjjqboutcuosuwtrtmtpbxpytutowybjwxuuwwtotwuxtywubwotutmtpqcxoyuucyowuxqtcwtltpslcwyuuucwctpowsxrtsssuwycywrtutrjbccmblytwtktltucmjtywwupxtttpyrtmtuytcbwymtybyyllrsujtrtjoucwqyxtkuywtcwotuxbmtxsuwwyqurysotccrwrttrqjwwumrtlwmoottoywurjcrwttyyutcwmotmkusotcrbwrltswrwjupwowlykwywwlwqttttwcuxttbuqtutsoclutyyuwwwklbupwybrctbpsjwybjqwobttlxywwwwjuwxorowyrurwywoocwwwtbkpkuourokpttxqsxpyrloryuwlwwwkwyutuqluwuowwtywttywtutoulotxwluwwtbottuowsuqltuwrwkbjwtwptyytpxttwkmyutyqsyobocwbtwwtwutwbpotyupocuwwrpqyjpoypwwomtolwqwcstymuulmxuuuyllpcwcppqwkcwubkjjymuxtbuuoytuyyoubbjtpyutwkttycywtykwttqllmxpuslkxutowkwusuxmqooxptmmcsorryqtuwuuxcjctjwywyjwmyuwtsxtyowbrjwutluqkkqortwtcrwsskkytytummwymlstwqykwuttwpjptyuxwyltyxubustwsjytooqmpctkpltwutotkbtpyjsuwkuquowmuwpjtwtmcmtsobwttoqcstwcqyjcuttjbkowwsutwswjqmtrotutwpluotxtrqmwjtbuwjwuwtttbtkwkomwqltcwtqkouojcttccuttuwkwwotbxurwkowtmtxmuwswpotwwtykxcucsuuwtsbpwbsuywjwboqsurxotrtbukplwbttyptuwuwwwoutusbwtytwtuwxtrspwutwxrutmwwyxtmpupowtrbwxwtywcxyljtuwtuttlpulctrywwttrwspyomottxjbmuysotqckrbyljyrukpolmkxwbcojcloycryybtwlqmyuoluwoqqbwwxjuxltpwrtyocowqkbqttujyrwyrtrqtujumrutlyuumurcwttwcoyqpwkumctwbtxjsktwwpwturbybuqwwotwuwwtwkstjmkbtymtbyyyrxtlupwyyyqwbrpurttmwuujuyowwwwottrqpwjuwutbtkjytrmwqtuoyyqbypwwwcxwtukowmuyotpwyjwoyouspbuluurtwuwtlwxjkscutukolcmtxtotkpjuoctuupxlslkswqwwoycrwttquooyuwlystuttwuctkyoobojyrcutowkpowwmwcomtuusrmosyyrxubttwcwuljutrotuxtttotptoowsuctojbcucrwyycouoxolktsyupswuytwbwtkwwwtbuwtxtcwtwxyywxtwctuqtwyytjtsokwtuorwwwoututttuuuttotowtotkuouwpwyujtooqykwqtuyuwypuytybouwotmtuwktowcwywsytutwtptpjjwmjktxtswqccmotbbwqyytotwrltrobcbcblyowtbxucwobmttwxscyoccwyluxytbuxwmjrmqmutttlmjyookywpqjwoxkwtwuwutotbsywttuyslbwuymouupwmbbxtubuypuyyyxrbtwwpqwctwuusqoytwytuoqkwjorjrqmttckrwljbuwurwtupuqybwpuukwtuqmwwwmwotuykyorsqqtwyypbobmymjukrwuwswoqbtxppyblbwtmjtutxcususootbytuybljlstttjtjyuwcwsoukwtuuywjkmbwpxoywytmoxjsmlmwjjojukstussswkoyllltpuwywtmtcwwwyosttlrrmsrultqpucqsxplxuslupqutrtybtowttuyxwwwkqtwyypytmuctuoxltwpwwyrtjubtuyuyytroloobyumqttobrtwcuxcccbqrjwuuttuykwubkqloootwytctxwypcutxuwytswttwbptrbwtyqtbmtwoxtcwccmotwrtrxoqcxuwmoootuqujubottxwkokcwycyqtqwuwpxyymouctrywuyktytlukujssuktwowwyctrtwtywlcctkttujpyrpkotqcwmrwwttybmssmbjwussbutmuluttutulmswlljtuxbwyujwkytytmxyltuxwtuomtoourswuuoyupkojlulutuktubuxwxttyquuxylwsumcuotwbuuukttttwjtjobtyjtusuoubctmtwwwswlcxpsojculowxcuwutktkwykwuwxkwotclccrwwwxwtjutotmtbtosusqtruobbtotswxtbrruywbwuwrctwysxjmlmsytljutmowwyqpwtjotybcwyoutyxqojxutkytqcctwmrwrubtwwutctkttwutwolwywrtrwmboulwtjcwubtoooxboutopswbqytywmwtwwqwptcottwwoscrytttwuomscbbbjqycuuomxusuubwxyctsowrpouqbjwwwxtuwqwstwjssckxoywwmpcrsttupuoqquuuqwxywrupuwktcttuukmcwuyuuortwysbtpqtttlqrtysssuowstcuwowupklokmcxuususkmktsyywkbwqkmtlbtkcwwouckpxjwoxujutkuttqmkwwqltpxwuuklwoojtcmtotkuqtwsytytructwjosujywwlsxyqtputyqryyukxupwtymwokyywuytoorwlpppybtpqstjlowswuwlywuwwtcpybjtostwwoqlwbwoklwlttulutqwowtqywwtbkwlwmwowtwwtupojwjmtwwpkcwcywmywuustqowtcttstyuqwtyllcywctmtywwqolrbjuostswtxttusoucmwtltsqckowwoupwywswllwotostlwsrjbtppwbobskcmsttmkuyowjtwctsomxoyttutlpyycxutlxwytmjuuoscuuqpwwttwwtwwlwwwkbowwttbtscuwmwkourboqqowlwqkpytwtocrtwbuyktqtlouxoomurructtlycywxswwpyustwmrswymwmwtqotuwowuwwbswbkpuwtrpuolsjyluquwpcwoywbpubpjullckkyxpwttypturwuutrrtwucsrstcuuuroutwmtxqyytybkpwjtlywjytumkwwysruumtcwycuuwqbrttxoutorwlumyyuoouoccwsptyqtyusukojqutrppjuosubwmwwpooquktyuybutpwbouwjtmostrtwqwwmbtoqyokputwtjbptywkytjbttqwwyukotlwoyoyopwtorxkjwuwttwxtttypktuclwtxsckoqtxytwtlttoctlswtqbucwkbwubxotkttcbtutottcttpuybqlwrojbwwoqwobysmxtpobltjoywlwkptukytpttymtltsxlpqbyuwlmycummltwpptttpwuwjojjwwsrqujyuttuujoopkjcuputjqwxjotcsbqwrottbtjwrbycoqbluyoutwtotosmktqtwtqwbsoxycurrxstjowuwuctjucjrtuwxskqjktuoxlqkxwtywrwwucbtukworttutprcbwsouupxytwmutuwykxwswrtulcywywprpotqcwsxosutkombtscotccyostwwtwrwuwpsujlwbqqrmutjrptxrtwoxcxuyptrkuuwxbuoywyrwmttujruwopowwuttkwwuuwtoqwctqwutwuttcxqbtcbyjtrotyskxqpxmjllumylcjkwlcotljqkyjsyojkowuturuojltwtolmmwukxbtksxsujuswooupttjtutyoupwqwutwmysupkukoyymywywomwwwccomtbcxyoqucjyjpwytybsowjkxytyttwjylurpkrtttsqttkutrtuwuwttttmuwxwxutookorcwkwstwttxuyywkuccwtwwtuuwyooktytktjutsousjbqulmrxwwwjwsocqtwwpttoykwypptbwjptklwlucrmbcwkyutobtwucwxlywxrsruywyumowwtmjbsmjjrtyblyttcwoutwtqsyxxultuyuqwrqwwupmqwwotsytomjqtcuwutscxkokwxwtttubuwjtujxttluuwwotwruuwywcktkmyryywtusotjttouwowbuuwtwjswuwpocoucobkrtwttytrywtwttulbxjpywsosxtbrocjuptytcwttmowtsuwrpjpmumqtljwjclttoquuprwjwqswutjbwtwtbortwcbtxtwswswpopywbcouwtwlbujxucyrwctwuyjptutowksyutkrwutupkklwojutucsowquttsulllwxppotuoktubrtopttmkbtmwmwkttopwpbkyxbuwkbjwyutmtwotsostswuxyjqqwlxutucltutxwtumyopjwlowwwttuwtopotuulwuowutottkppwotocwwxtbcusywwqwxtwtkytquttuwyujttusqwwcwmpttcllyrsxwuobrtmtbqptwqytplwyuwmtyltbcrwubrwxtwtqmkwkwptkmuujlwutqukwpyjrtxwsstmutuqytmpxkypulwortyswtuxwsukyruqbtostbbtyyyubttusjukwmmwstcyo
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccjjcjcjtjjltjottccktjotjlqlmqottjtktcosttjqmqjqcmwkxtctuwlkwjctujttluulwxttcutrksuscktltottuqcttstworxrtuctwucwrltkwowqtmuckwkmwlwqkwxywjlrkuwmwwjtuwyckuqtcwstcoukttuwwuujytowwtxpxuywsstuotcstqwtwljojpwurtruxwtstpuottmtqypwsouljwyqywwlutwpytklrwwclylmxyptwqxloyuowurpsttussuututmwwquoutpxutttortuouqtkpxmuwtywwwtuwytttyulktwsouopwywtwuttuwkmypuwmoutlrukrlupytotwuwsxuuuortquqkklowlttxquotuwowrsocluyxrmulcortwkwktoucqsrwxytloxkmyurccqqwuwykrttuyuwwsustqjkutluttcwycostrcwjotoukuxutxwqytrltlljyccuuksqwtuqtwtryujukpswutkoytpttosywowcrtqtsuuuowttolyywjtuptwxporjycskorypysuottcqmpyctwrwlpytosrtmrtrxrqopjyssouoojyruxuywttcmwtmoqqxuwlwttworsuowuwcjtttuujylysolwjxlutuowowswsckctutwkjpoutwmtyotwutmqtcoyrmtcutmslpoltyptpttryqtcuwyuutmmtqkuwutwxtjupytoqyuxsutswttwtltumuwppourwttukyuwyswuttwowtmowrwuwwtcwqotuuqswqyuxtqjokttotcxuutquwmpuwuutwyuqtmtywlwswtwuttuuwxtywtjotywsuqttwuxjjytqkuyruxkkmctjjwcucltjwkquptowqpwcutoqlolwjstwswxqtoowrsttkwxwotylkwwuooycqrsuwwokrwlymwmotstotumquoktwluqmquwwtrosutywcmuwwwmwylwwoqwjuwyuwtuyomqyyqopowqputyttwlkyuwqkjojwxptwtywotccutumrkucqruqkywlxoptmuwwuyprkqqpwstowwxjwluwucscuktxyjtyuqmtyjtwutlksrtwuotwkywytcuruysouuquttpywoctwcxocwukpjcwyqyxmxotpwmuluptjxsttquyxcxcwutwmctjwwpwpxtjrwttjyqkcptcwkwumumorctttwswotqkwpqwypluuruwwoxwytmcutpooccprtspulyomtkucopxywywrcowwooortspmtwjoswjywptotulxtxuytwtjrrtqkmymttmoywutqytqwwrqtutojytrwtptwtwktkowwtsosjtlwtwttptwocuotujwtttlqusycutuytowwlouwytltwojukwocpkxmuyrpwlwtttjwuyoswmtymtpujttlqyxlwplttwxowlslswmwwlxwrypumusywrwwtwtwtutuyxotostutqlkxotsxmcptlwmcoqtuljukyrwuxypwqwwwjjuwlwywwuuxruorqowtkjtmyoqowklowyscuoctkqyooxuutkmwsprywrukwrupxqyukujtctuywuyypotxxylwooolwkjyoswuutytotwymojltypotjwttttuuuuuysttmswymsutuwousqxcwpxuctcutowysoummtrtukwuxwtywwmrtuttuwuwqopryscqorwruxwoyxxotowotwyystpwwrlttwrttoctssxwwmpljmpuutttjqmoyomkrpxtuqqwtomtuyoxqytlttttwwpmxtsytutlomwoxmwwwwwwtsokwowuyrsutwwrowklctwtyytywtcmwwppwwtwtouqjrtjoqywkmsstuttysuututljorxtywkuxmptylytpqywtsuoottwlrucolswmujluxmptroowwwtkutuwyojoutmotwotctpcttctturwwqjtsqcwwktjsuumxuspuwoyqpmjlyktuwulctotyyptwytmyjttqcputucumptwuyuojuotjqksurcqtjuwcmcottxykwkwypqwwsyowtptjroymsuwymqxwtwttmwwxkwoltcucjmpwwwuuwkttswwujrprotsuwuutjturjtxujytsxyuopwwtsctljswusyjwuwutowoutuoopjwtttopcxcyrwrutwootpttwuwjomowokutwwtjtowtwlswwccuquumjswmktwwwmmopqxutwwrspcytlkxttytktspysxpkcoucytwootwpumjwuutywrctwtskopmwtcqcuysqusmxosoyupuwkxwyyulwwostyuuyqwquwtquwctowtourrsmyoxlwucwyywkoywwsmjorsmwcwcwoykwwuokotcuwluyyxmwsspoyxuxypwwctjkyttpqkuyttttwxttlktuwwywuwsjttcwpytutujxrsltpttotmywuwytowtsttuyttqyuwttjrtpxwruwjouylxupttlpttwowmwwctturwtujtwooxowwpwowwutytpwtcuwwtjumkkosxuwwottqwmtuwxtwwjtuttpuswcuwtysctuowttwmtxtjjtwwtcctucuwttuywwwyyyyuxytwwryrktuyuwmtwwusportotycwspwououlwtptmutwmwjttxwxoxtlkttttyymlwwqwxwuusuuupomrjuqswtoluwwotyotmurttwwtsocmcwcsxcwsurpwtutcutwtpwmouccuotkkxtwukuxqloxwywjwoyomrwsyjuputysltrtyutyjqutsmwsjorpumtcustuuwuwwtquruywulkyckkxpwkwswwysutjcsxjtwswtsujttwsputtrtoxrurltxswtywttuuotmjtcuwqmkuywwjwoyqtwytuytwoywwpuuwqoytrusstxqstuyqjuopurtxowtcqrwwptrcttycopruwytwykolmwwywytorttcotxwulylyyucccwktywtcusuusujtuouuoyqujmktwpctcutttrwttwwwwmtcouwkstlkpyuqswyylrqwyuutyowckwwstutylcquutyuwtxoprytuwotkjwlyumslwktloxujtqwyjuycuytmwymlturwwtwtsmtpxpuwwwyttwmwoocrllcsyuoctyojwpktwywutusutjuruwouqouwtlrpuywtuwrwkwoocswotoujpuuoytxpyytmyutwwcwjutoqtrutjwypojtuxutctutwjsotojtwytwywworkwlrtxuttwuotyplumumuuruytutytlwrwysytmtlykwktywpyutxwlyuqoxkywtscumulwmxpwcqcjpmwuctxojytkxwqyrwrtumuswuttmuccoyktxttstrtukcktwyqxwqcluwyyyuuxtwucxtkcpotqooptwwowymtlmyytkcwyyttsxtolruutpotupttojtwkwrqslopqpotwtwrtowwwukopslopskowqymywwmsulttcllsuwmryjyktupstjmwukukwyupttoccttutwycwwyjutkqpuqrowukcspyuuxkwskwyukwukcjuuucupuwwxtwuopwlottutmwokttktxpjwomtqyutllrylrywyroytstcoslpyrwolwtwswwqwkwxxowtopqjttoxtwwupxxwoctyukompjjpscykkxpxwtwusmrouywtlkwumcjwtwywwtctpwlxkqjjjyltuomwtlpuotqurpsupwukwotlujtpuuucosmccttxwwqoottxwkqkjlwylpopxljwytuqwtwttstptocyoxtucwwttxwmowmwtluwykoyytqyorupowpskwyqwykuytuokjtkwptupjyruxwwcosttstjqjwwokswwywucpxwtycuyysqtrcxrurxwtcottxclwkyttoruqttlwcwuwtwxwyutyrtwuuwouxcucwostptutrwysxuwwscywwwttwtrjwmwtkwrlmykrwjprwytwyoywwrtyuykytmwwwyytwcrorttojuywttyotwyulsouuummywpsxlstkouptwrkutywtyoutktwuyptjwcptpowtucwjcooulsttturuowmpscwtptqwsxspwyrujotcwsokwwwtmrtkysyulorklyxylwcowuwourwtqtcukwooujttqwtykprltwxsjmlllujstomwmpwwtjwmmtqwwpjcotlwtrojcwkukcytuwwwwotkwtwytswtpokmcwmytuwwjtocjusjuwktxoktmtxwkostywqujowroottwoucwuuowulwjytylqwswjocltytuwmktytycuuuwmyuusltttpqlwrwwttcksjmxowtoqctckrkcuypooctlwrsqpruwumuruyouxmltqwstummtutsucmwuroumwmomwoxwluuruotuswxoytuyusjlwkyxuuwtpyyqtsyourkwoutwtyocrtytwslyxwucttoqtxyyltwlwyyyyyyttqtojtktptwqyjwmjlslyupltttspwcmtkorrtpwsrwtwwtcysqotycptuyuqutyukmkuujwujkywqowxuwuuoxquymyquywpwotluwktowswoyoujusukloyoywyjurwltjtwutktwqwrqrwtqmwxwtksrytoojrookuytttlsqwuptt


#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include <cassert>

using namespace std;
const int CHARMAX=26;

bool incl(int* stat, int* remain) {
    for(int i=0 ; i<CHARMAX; i++)
        if(stat[i] > remain[i])
            return false;
    return true;
}

int nextidx(string &s, int idx, int* stat, int* remain) {
    int smallidx = idx;
    int tmpremain[CHARMAX];
    for(int j=0; j<CHARMAX; j++) tmpremain[j]= remain[j];
    
    for(int i=idx; i<s.size(); i++) {
        if(stat[s[i]-'a'] > 0 && s[i]<s[smallidx]) {
            if(incl(stat, tmpremain)) {
                smallidx = i;
            }
        }
        tmpremain[s[i]-'a']--;
    }
    return smallidx;
}

int main() {
    string s;
    cin >> s;
    int stat[CHARMAX], remain[CHARMAX];
    for(int i=0; i<CHARMAX; i++)
        stat[i] = 0;
    for(int i=0; i<s.size(); i++)
        stat[s[i]-'a']++;
    for(int i=0; i<CHARMAX; i++) {
        remain[i] = stat[i];
        stat[i] /= 2;
    }
    
    string ans;
    for(int i=0; i<s.length(); i++) {
        int ni = nextidx(s, i, stat, remain);
        char thechar = s[ni];
        if(stat[thechar-'a']-- > 0) ans += thechar;
        if(ans.size() == s.length()/2) break;
        
        for(int j=i; j<=ni; j++)
            remain[s[j]-'a']--;
        i = ni;
    }
    cout << ans << endl;
    return 0;
}

2016년 3월 21일 월요일

random , shuffle.

C++을 쓰다 보면 C보다 참 쉽게 느껴지다가도 이런거 보면 자바따라가나 싶기도 하고.

string shuffle 예제. (출처)

string shuffle(string a) {
    unsigned seed = chrono::system_clock::now().time_since_epoch().count();
    shuffle(a.begin(), a.end(), default_random_engine(seed));
    cout << "shuffle : " << a << endl;
    return a;
}

아래는  random string 생성 예제인데, 좀더 fancy/tricky한 방법이 몇개 더 있는것 같지만 가장 직관적인 것 같다. (출처)

string gen_random(const int len) {
    string r;
    static const char alphanum[] =
    "0123456789"
    "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    "abcdefghijklmnopqrstuvwxyz";
    
    for (int i = 0; i < len; ++i) {
        r += (char)(alphanum[rand() % (sizeof(alphanum) - 1)]);
    }
    
    return r;

}

2016년 2월 4일 목요일

네이버 내비게이션

 네이버에서 내비게이션이 얼마전에 나왔다. 네이버에서 만든건 아니고 네이버 지도에 맵피 내비게이션을 붙였다고 하는데 정확한건 모르겠다. 아이폰은 없고 안드로이드에만 있다. 네이버에서 손을 댔으니 추후 아이폰도 지원하지 않을까 한다. 사용해보니 뭔가 아직 깔끔하게 정돈된 느낌은 아니고 이리저리 약간 지저분하기는 한데 사용하기에 불편함은 없다. 네이버 지도에서 검색 후 내비로 넘어갈 수도 있고, 내비에서 바로 검색도 가능하다.
 무엇보다 검색능력이 타사 내비에 비해 압도적이어서 만족스럽다. 상호명이 약간 다르다거나 상호가 아니라 그냥 주소를 넣는다거나, 상호가 두 단어일 때 두 단어의 순서가 바뀐것, ‘강원도 편의점’처럼 지역과 추상어의 결합도 가능했다. 다른 내비게이션들도 되기는 되는데 매우 기능이 약해서 검색이 안되는 경우가 허다하다. 
 길안내 UI도 첫인상과는 달리 괜찮았다. 첫인상은 굉장히 허접해보이는데, 허접해 보이는 와중에도 보여야 할 정보가 보이지 않는다든지 하는 일은 없었다. 예전에 티맵을 쓰다가 티맵이 갈수록 자꾸 골목길로 안내를 한다든지 뻔한 길을 놔두고 돌아가는 길을 알려주는 일이 잦아져서 맵피, 올레내비, 현대자동차기본내비를 돌아가면서 썼다. 자동차 기본 내비는 자동차와의 일체감이 훌륭하고 예전처럼 구리지 않아서 충분히 그것만으로도 실사용이 가능하나 실시간 교통상황의 반영이 느리고, 올레내비는 너무 샛길로 빠지지도 않고 그렇다고 대로로만 가지도 않는, 정말 훌륭한 길을 알려주지만 UI가 너무 좋지 않아서 운전하면서 보기가 힘들다. 안내음성도 과속구간에서는 너무 시끄럽고, 빠지는 길에서는 어디에서 빠진다고 알려주는 타이밍이 타사 내비에 비해 좋지 않다. 지금 어디쯤 왔는지 보려고 해도 글씨가 너무 작아서 보기가 힘들다. 자동차 기본내비는 화면이 크다보니 이런점에는 절대적 우위에 있었다. 맵피는 이 둘의 균형이 아주 좋다. 길도 너무 어렵지 않으면서 적당히 빠른 길을 잘 알려주고 UI도 알아보기 좋고 음성안내도 적절하고. 나름 만족스러웠다. 다만, 균형이 좋다는건 어느것 하나 뛰어난 것이 없이 무난하다는 말도 되어서 ‘좋은 길’을 더욱 선호하는 나로서는 UI가 조금 불편해도 올레내비를 자주 사용하게 된다. (김기사는 그 어느것 하나 장점이랄만한 것이 없어서 두세번정도 사용해보고 곧바로 제외했다.)
 네이버 내비는 위에 나열한 내비중에는 (당연하게도) 맵피에 가장 근접한데, 목표점 검색이 빠르고 정확해서 몇번 사용해보니 다른 내비가 너무 불편하게 느껴졌다. 위의 내비들은 공통적으로 동작이 느려서 ‘다들 그러니 원래 그런것이려니’하고 사용해왔는데 목표점 검색/설정/안내 - 이 세 동작이 빠르게 연결되는 내비를 써보니 다른점들은 다 고만고만하게 느껴진다. 앞으로는 네이버 내비를 주로 이용하게 될것 같다.

2015년 12월 30일 수요일

gdb print stl

gdb쓸 때 vector, map등 stl이 pretty하게 보이지 않으면 다음을 이용한다.

https://sourceware.org/gdb/wiki/STLSupport

링크에 세가지 방법이 있는데, 첫번째 방법만 써도 거의 모든 문제가 해결된다.
혹시 링크 깨질까봐 옮겨두자면,
svn co svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python
하고, ~/.gdbinit에 다음을 추가.
sys.path.insert의 path에는 위에서 받은 python directory의 path를 넣어준다.
python
import sys
sys.path.insert(0, '/home/maude/gdb_printers/python')
from libstdcxx.v6.printers import register_libstdcxx_printers
register_libstdcxx_printers (None)
end

2015년 9월 11일 금요일

merge arrays




그냥 간단하게 하면 되는 것을 꼼수를 써보겠다고 쇼를 했다.
자세한건 다음에...


#include <iostream>#include <vector>#include <algorithm>
#define v std::vector<int>
v MergeArrays(v A, v B) {  v u(100),n(100),x(100);  n.resize(set_intersection(A.begin(), A.end(), B.begin(), B.end(), n.begin())-n.begin());  x.resize(set_symmetric_difference(A.begin(), A.end(), B.begin(), B.end(), x.begin())-x.begin());  u.resize(set_symmetric_difference(n.begin(), n.end(), x.begin(), x.end(), u.begin())-u.begin());  u.resize(unique(u.begin(), u.end())-u.begin());  return u;}
int main() {  v r = MergeArrays({10,10,10,15,20,20,25,25,30,7000},{10,15,20,20,27,7200});  for(int i:r)    std::cout << i << ", ";
  return 0;}


2015년 8월 27일 목요일

bash prompt color

일과는 별로 상관 없는 것인데 은근히 꾸준히 찾아보게 된다.
stackoverflow에 정말 great한 answer가 있어서 링크
http://stackoverflow.com/a/20983251/766330