시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 128 MB28061277107547.524%

문제

암호학에서 치환 암호(substitution cipher)란, 평문에 들어있는 각각의 문자를 주어진 치환 방법으로 암호화하는 방법 중 하나다.

가장 단순한 방법은 평문의 알파벳을 암호문의 알파벳으로 대치시켜 치환시키는 것이다.

예를 들어, 아래와 같은 알파벳 대치표가 주어졌다고 하자.

  • 평문 알파벳 대치표 : abcdefghijklmnopqrstuvwxyz
  • 암호문 알파벳 대치표 : wghuvijxpqrstacdebfklmnoyz

위에 주어진 치환 방법을 통해 암호화하면 평문 "hello there"은 "xvssc kxvbv"가 된다.

한 가지 흥미로운 점은 영어 문법 특성상, 알파벳 'e'가 다른 영문 알파벳에 비해 자주 쓰인다는 것이다.

즉, 암호문 알파벳 대치표 없이 암호문을 복호화하려 할 때, 암호문 알파벳 빈도수를 체크하면 암호문 알파벳 빈도수 중 가장 빈번하게 나타나는 알파벳이 'e'라는 사실을 유추해볼 수 있다.

위 방법으로 암호문 알파벳의 빈도수를 체크하고, 가장 빈번하게 나타나는 문자를 출력하는 프로그램을 작성하면 된다.

만약 주어진 암호문에서 가장 빈번하게 나타나는 문자가 여러 개일 경우, 그 빈번한 문자 중 어느 것이 평문 알파벳 'e'를 가리키는지 확실하게 알 수 없기 때문에 "모르겠음"을 의미하는 '?'를 출력하면 된다.

입력

입력의 T(1 ≤ T ≤ 20)는 테스트 케이스로, 입력 제일 상단에 주어진다. 각각의 테스트 케이스는 한 줄마다 소문자와 공백으로 이루어진 영어 문장이 주어진다. 이 문장의 길이는 적어도 1이상이며 255이하다.

출력

각각의 테스트 케이스에 대해, 가장 빈번하게 나타나는 문자를 출력하거나 빈번하게 나타나는 문자가 여러 개일 경우 '?'를 출력한다.

예제 입력 1

3
asvdge ef ofmdofn
xvssc kxvbv
hull full suua pmlu

예제 출력 1

f
v
?
W3sicHJvYmxlbV9pZCI6IjkwNDYiLCJwcm9ibGVtX2xhbmciOiIwIiwidGl0bGUiOiJcdWJjZjVcdWQ2MzhcdWQ2NTQiLCJkZXNjcmlwdGlvbiI6IjxwPlx1YzU1NFx1ZDYzOFx1ZDU1OVx1YzVkMFx1YzExYyBcdWNlNThcdWQ2NTggXHVjNTU0XHVkNjM4KHN1YnN0aXR1dGlvbiBjaXBoZXIpXHViNzgwLCBcdWQzYzlcdWJiMzhcdWM1ZDAgXHViNGU0XHVjNWI0XHVjNzg4XHViMjk0IFx1YWMwMVx1YWMwMVx1Yzc1OCBcdWJiMzhcdWM3OTBcdWI5N2MgXHVjOGZjXHVjNWI0XHVjOWM0Jm5ic3A7XHVjZTU4XHVkNjU4IFx1YmMyOVx1YmM5NVx1YzczY1x1Yjg1YyZuYnNwO1x1YzU1NFx1ZDYzOFx1ZDY1NFx1ZDU1OFx1YjI5NCBcdWJjMjlcdWJjOTUgXHVjOTExIFx1ZDU1OFx1YjA5OFx1YjJlNC48XC9wPlxyXG5cclxuPHA+XHVhYzAwXHVjN2E1IFx1YjJlOFx1YzIxY1x1ZDU1YyBcdWJjMjlcdWJjOTVcdWM3NDAgXHVkM2M5XHViYjM4XHVjNzU4IFx1YzU0Y1x1ZDMwY1x1YmNiM1x1Yzc0NCBcdWM1NTRcdWQ2MzhcdWJiMzhcdWM3NTggXHVjNTRjXHVkMzBjXHViY2IzXHVjNzNjXHViODVjIFx1YjMwMFx1Y2U1OFx1YzJkY1x1Y2YxYyZuYnNwO1x1Y2U1OFx1ZDY1OFx1YzJkY1x1ZDBhNFx1YjI5NCBcdWFjODNcdWM3NzRcdWIyZTQuPFwvcD5cclxuXHJcbjxwPlx1YzYwOFx1Yjk3YyBcdWI0ZTRcdWM1YjQsIFx1YzU0NFx1Yjc5OFx1YzY0MCBcdWFjMTlcdWM3NDAgXHVjNTRjXHVkMzBjXHViY2IzIFx1YjMwMFx1Y2U1OFx1ZDQ1Y1x1YWMwMCBcdWM4ZmNcdWM1YjRcdWM4NGNcdWIyZTRcdWFjZTAgXHVkNTU4XHVjNzkwLjxcL3A+XHJcblxyXG48dWw+XHJcblx0PGxpPlx1ZDNjOVx1YmIzOCBcdWM1NGNcdWQzMGNcdWJjYjMmbmJzcDtcdWIzMDBcdWNlNThcdWQ0NWMgOiBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejxcL2xpPlxyXG5cdDxsaT5cdWM1NTRcdWQ2MzhcdWJiMzggXHVjNTRjXHVkMzBjXHViY2IzJm5ic3A7XHViMzAwXHVjZTU4XHVkNDVjIDombmJzcDt3Z2h1dmlqeHBxcnN0YWNkZWJma2xtbm95ejxcL2xpPlxyXG48XC91bD5cclxuXHJcbjxwPlx1YzcwNFx1YzVkMCBcdWM4ZmNcdWM1YjRcdWM5YzQgXHVjZTU4XHVkNjU4IFx1YmMyOVx1YmM5NVx1Yzc0NCBcdWQxYjVcdWQ1NzQgXHVjNTU0XHVkNjM4XHVkNjU0XHVkNTU4XHViYTc0IFx1ZDNjOVx1YmIzOCAmcXVvdDtoZWxsbyB0aGVyZSZxdW90O1x1Yzc0MCAmcXVvdDt4dnNzYyBreHZidiZxdW90O1x1YWMwMCBcdWI0MWNcdWIyZTQuPFwvcD5cclxuXHJcbjxwPlx1ZDU1YyBcdWFjMDBcdWM5YzAgXHVkNzY1XHViYmY4XHViODVjXHVjNmI0IFx1YzgxMFx1Yzc0MCBcdWM2MDFcdWM1YjQgXHViYjM4XHViYzk1IFx1ZDJiOVx1YzEzMVx1YzBjMSwgXHVjNTRjXHVkMzBjXHViY2IzICYjMzk7ZSYjMzk7XHVhYzAwIFx1YjJlNFx1Yjk3OCBcdWM2MDFcdWJiMzggXHVjNTRjXHVkMzBjXHViY2IzXHVjNWQwIFx1YmU0NFx1ZDU3NCZuYnNwO1x1Yzc5MFx1YzhmYyBcdWM0ZjBcdWM3NzhcdWIyZTRcdWIyOTQgXHVhYzgzXHVjNzc0XHViMmU0LjxcL3A+XHJcblxyXG48cD5cdWM5ODksIFx1YzU1NFx1ZDYzOFx1YmIzOCBcdWM1NGNcdWQzMGNcdWJjYjMgXHViMzAwXHVjZTU4XHVkNDVjIFx1YzVjNlx1Yzc3NCBcdWM1NTRcdWQ2MzhcdWJiMzhcdWM3NDQgXHViY2Y1XHVkNjM4XHVkNjU0XHVkNTU4XHViODI0IFx1ZDU2MCBcdWI1NGMsIFx1YzU1NFx1ZDYzOFx1YmIzOCBcdWM1NGNcdWQzMGNcdWJjYjMgXHViZTQ4XHViM2M0XHVjMjE4XHViOTdjIFx1Y2NiNFx1ZDA2Y1x1ZDU1OFx1YmE3NCBcdWM1NTRcdWQ2MzhcdWJiMzggXHVjNTRjXHVkMzBjXHViY2IzIFx1YmU0OFx1YjNjNFx1YzIxOCBcdWM5MTEgXHVhYzAwXHVjN2E1IFx1YmU0OFx1YmM4OFx1ZDU1OFx1YWM4YyBcdWIwOThcdWQwYzBcdWIwOThcdWIyOTQgXHVjNTRjXHVkMzBjXHViY2IzXHVjNzc0ICYjMzk7ZSYjMzk7XHViNzdjXHViMjk0IFx1YzBhY1x1YzJlNFx1Yzc0NCBcdWM3MjBcdWNkOTRcdWQ1NzRcdWJjZmMgXHVjMjE4IFx1Yzc4OFx1YjJlNC48XC9wPlxyXG5cclxuPHA+XHVjNzA0IFx1YmMyOVx1YmM5NVx1YzczY1x1Yjg1YyBcdWM1NTRcdWQ2MzhcdWJiMzggXHVjNTRjXHVkMzBjXHViY2IzXHVjNzU4IFx1YmU0OFx1YjNjNFx1YzIxOFx1Yjk3YyBcdWNjYjRcdWQwNmNcdWQ1NThcdWFjZTAsIFx1YWMwMFx1YzdhNSBcdWJlNDhcdWJjODhcdWQ1NThcdWFjOGMgXHViMDk4XHVkMGMwXHViMDk4XHViMjk0IFx1YmIzOFx1Yzc5MFx1Yjk3YyBcdWNkOWNcdWI4MjVcdWQ1NThcdWIyOTQgXHVkNTA0XHViODVjXHVhZGY4XHViN2E4XHVjNzQ0IFx1Yzc5MVx1YzEzMVx1ZDU1OFx1YmE3NCBcdWI0MWNcdWIyZTQuPFwvcD5cclxuXHJcbjxwPlx1YjljY1x1YzU3ZCZuYnNwO1x1YzhmY1x1YzViNFx1YzljNCBcdWM1NTRcdWQ2MzhcdWJiMzhcdWM1ZDBcdWMxMWMmbmJzcDtcdWFjMDBcdWM3YTUgXHViZTQ4XHViYzg4XHVkNTU4XHVhYzhjIFx1YjA5OFx1ZDBjMFx1YjA5OFx1YjI5NCBcdWJiMzhcdWM3OTBcdWFjMDAgXHVjNWVjXHViN2VjIFx1YWMxY1x1Yzc3YyBcdWFjYmRcdWM2YjAsIFx1YWRmOCBcdWJlNDhcdWJjODhcdWQ1NWMgXHViYjM4XHVjNzkwIFx1YzkxMSBcdWM1YjRcdWIyOTAgXHVhYzgzXHVjNzc0IFx1ZDNjOVx1YmIzOCZuYnNwO1x1YzU0Y1x1ZDMwY1x1YmNiMyZuYnNwOyYjMzk7ZSYjMzk7XHViOTdjIFx1YWMwMFx1YjlhY1x1ZDBhNFx1YjI5NFx1YzljMCBcdWQ2NTVcdWMyZTRcdWQ1NThcdWFjOGMgXHVjNTRjIFx1YzIxOCBcdWM1YzZcdWFlMzAgXHViNTRjXHViYjM4XHVjNWQwICZxdW90O1x1YmFhOFx1Yjk3NFx1YWNhMFx1Yzc0YyZxdW90O1x1Yzc0NCBcdWM3NThcdWJiZjhcdWQ1NThcdWIyOTQgJiMzOTs/JiMzOTtcdWI5N2MgXHVjZDljXHViODI1XHVkNTU4XHViYTc0IFx1YjQxY1x1YjJlNC48XC9wPlxyXG4iLCJpbnB1dCI6IjxwPlx1Yzc4NVx1YjgyNVx1Yzc1OCBUKDEgJmxlOyBUICZsZTsgMjApXHViMjk0IFx1ZDE0Y1x1YzJhNFx1ZDJiOCBcdWNmMDBcdWM3NzRcdWMyYTRcdWI4NWMsIFx1Yzc4NVx1YjgyNSBcdWM4MWNcdWM3N2MgXHVjMGMxXHViMmU4XHVjNWQwIFx1YzhmY1x1YzViNFx1YzljNFx1YjJlNC4gXHVhYzAxXHVhYzAxXHVjNzU4IFx1ZDE0Y1x1YzJhNFx1ZDJiOCBcdWNmMDBcdWM3NzRcdWMyYTRcdWIyOTQgXHVkNTVjIFx1YzkwNFx1YjljOFx1YjJlNCBcdWMxOGNcdWJiMzhcdWM3OTBcdWM2NDAgXHVhY2Y1XHViYzMxXHVjNzNjXHViODVjIFx1Yzc3NFx1YjhlOFx1YzViNFx1YzljNCBcdWM2MDFcdWM1YjQgXHViYjM4XHVjN2E1XHVjNzc0IFx1YzhmY1x1YzViNFx1YzljNFx1YjJlNC4gXHVjNzc0IFx1YmIzOFx1YzdhNVx1Yzc1OCBcdWFlMzhcdWM3NzRcdWIyOTQgXHVjODAxXHVjNWI0XHViM2M0IDFcdWM3NzRcdWMwYzFcdWM3NzRcdWJhNzAgMjU1XHVjNzc0XHVkNTU4XHViMmU0LjxcL3A+XHJcbiIsIm91dHB1dCI6IjxwPlx1YWMwMVx1YWMwMVx1Yzc1OCBcdWQxNGNcdWMyYTRcdWQyYjggXHVjZjAwXHVjNzc0XHVjMmE0XHVjNWQwIFx1YjMwMFx1ZDU3NCwgXHVhYzAwXHVjN2E1IFx1YmU0OFx1YmM4OFx1ZDU1OFx1YWM4YyBcdWIwOThcdWQwYzBcdWIwOThcdWIyOTQgXHViYjM4XHVjNzkwXHViOTdjIFx1Y2Q5Y1x1YjgyNVx1ZDU1OFx1YWM3MFx1YjA5OCBcdWJlNDhcdWJjODhcdWQ1NThcdWFjOGMgXHViMDk4XHVkMGMwXHViMDk4XHViMjk0Jm5ic3A7XHViYjM4XHVjNzkwXHVhYzAwIFx1YzVlY1x1YjdlYyBcdWFjMWNcdWM3N2MgXHVhY2JkXHVjNmIwICYjMzk7PyYjMzk7XHViOTdjIFx1Y2Q5Y1x1YjgyNVx1ZDU1Y1x1YjJlNC48XC9wPlxyXG4iLCJoaW50IjoiIiwib3JpZ2luYWwiOiIwIiwiaHRtbF90aXRsZSI6IjAiLCJwcm9ibGVtX2xhbmdfdGNvZGUiOiJLb3JlYW4ifSx7InByb2JsZW1faWQiOiI5MDQ2IiwicHJvYmxlbV9sYW5nIjoiMSIsInRpdGxlIjoiRGVjcnlwdGlvbiIsImRlc2NyaXB0aW9uIjoiPHA+SW4gY3J5cHRvZ3JhcGh5LCBhIHN1YnN0aXR1dGlvbiBjaXBoZXIgaXMgYSBtZXRob2Qgb2YgZW5jcnlwdGlvbiBieSB3aGljaCB1bml0cyAodXN1YWxseSwgc2luZ2xlIGxldHRlcnMpIG9mIHBsYWludGV4dCBhcmUgc3Vic3RpdHV0ZWQgd2l0aCBjaXBoZXJ0ZXh0LiBPbmUgb2YgdGhlIHNpbXBsZXN0IHdheXMgc3Vic3RpdHV0ZXMgYSBwbGFpbnRleHQgYWxwaGFiZXQgYnkgYSBjaXBoZXJ0ZXh0IGFscGhhYmV0LiBGb3IgZXhhbXBsZSwgaWYgeW91IGFyZSBnaXZlbiB0aGUgZm9sbG93aW5nIGFscGhhYmV0cywmbmJzcDs8XC9wPlxyXG5cclxuPHVsPlxyXG5cdDxsaT5QbGFpbnRleHQgYWxwaGFiZXQgOiBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiZuYnNwOzxcL2xpPlxyXG5cdDxsaT5DaXBoZXJ0ZXh0IGFscGhhYmV0IDogd2dodXZpanhwcXJzdGFjZGViZmtsbW5veXombmJzcDs8XC9saT5cclxuPFwvdWw+XHJcblxyXG48cD5BIG1lc3NhZ2Ugb2YgJmxkcXVvO2hlbGxvIHRoZXJlJnJkcXVvOyBpcyBlbmNyeXB0ZWQgaW50byAmbGRxdW87eHZzc2Mga3h2YnYmcmRxdW87IHVzaW5nIHRoZSBhYm92ZSBzdWJzdGl0dXRpb24gbWV0aG9kLiZuYnNwOzxcL3A+XHJcblxyXG48cD5PbmUgaW50ZXJlc3RpbmcgZmFjdCBpcyB0aGF0IGluIHRoZSBFbmdsaXNoIGxpdGVyYXR1cmUsIHRoZSBsZXR0ZXIgJmxzcXVvO2UmcnNxdW87IGlzIGtub3duIGFzIHRoZSBtb3N0IGZyZXF1ZW50IG9uZSBhbW9uZyB0aGUgRW5nbGlzaCBhbHBoYWJldC4gSGVuY2UsIHdoZW4geW91IHRyeSB0byBkZWNyeXB0IGFuIGVuY3J5cHRlZCB0ZXh0IHdpdGhvdXQgdGhlIGNpcGhlcnRleHQgYWxwaGFiZXQsIHlvdSBjYW4gZ3Vlc3Mgd2hpY2ggbGV0dGVyIGluIHRoZSBjaXBoZXJ0ZXh0IGFscGhhYmV0IHdvdWxkIGltcGx5ICZsc3F1bztlJnJzcXVvOyBieSBjb3VudGluZyB0aGUgbnVtYmVyIG9mIGFwcGVhcmFuY2VzIG9mIGVhY2ggbGV0dGVyIGluIHRoZSBlbmNyeXB0ZWQgdGV4dC4mbmJzcDs8XC9wPlxyXG5cclxuPHA+WW91IGFyZSB0byB3cml0ZSBhIHByb2dyYW0gdGhhdCBjb3VudHMgZWFjaCBsZXR0ZXIgaW4gYW4gZW5jcnlwdGVkIHRleHQgYW5kIHByaW50cyBvdXQgdGhlIG1vc3QgZnJlcXVlbnQgb25lIHVzaW5nIHRoZSBhYm92ZSBpZGVhLiBJZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBtb3N0IGZyZXF1ZW50IGxldHRlcnMgaW4gdGhlIGdpdmVuIHRleHQsIHlvdXIgcHJvZ3JhbSBzaG91bGQgcHJpbnQgb3V0ICZsc3F1bzs/JnJzcXVvOywgbWVhbmluZyAmbGRxdW87bm8gaWRlYSZyZHF1bzssIGJlY2F1c2UgeW91IGNvdWxkIG5vdCBiZSBzdXJlIHRoYXQgd2hpY2ggb25lIHdvdWxkIG1hdGNoICZsc3F1bztlJnJzcXVvOyBpbiB0aGUgcGxhaW50ZXh0IGFscGhhYmV0LiZuYnNwOzxcL3A+XHJcbiIsImlucHV0IjoiPHA+WW91ciBwcm9ncmFtIGlzIHRvIHJlYWQgdGhlIGlucHV0IGZyb20gc3RhbmRhcmQgaW5wdXQuIFRoZSBpbnB1dCBjb25zaXN0cyBvZiBUICgxICZsZTsgVCAmbGU7IDIwKSB0ZXN0IGNhc2VzLiBUaGUgbnVtYmVyIG9mIHRlc3QgY2FzZXMgVCBpcyBnaXZlbiBpbiB0aGUgZmlyc3QgbGluZSBvZiB0aGUgaW5wdXQuIEVhY2ggdGVzdCBjYXNlIGlzIGdpdmVuIGJ5IGEgc3RyaW5nIG9mIHRoZSBFbmdsaXNoIGFscGhhYmV0IG9mIGxvd2VyY2FzZSBhbmQgc3BhY2VzLCBsaW5lIGJ5IGxpbmUsIHdpdGggbGVuZ3RoIGJldHdlZW4gMSBhbmQgMjU1LiZuYnNwOzxcL3A+XHJcbiIsIm91dHB1dCI6IjxwPllvdXIgcHJvZ3JhbSBpcyB0byB3cml0ZSB0byBzdGFuZGFyZCBvdXRwdXQuIEZvciBlYWNoIHRlc3QgY2FzZSwgcHJpbnQgb3V0IHRoZSBtb3N0IGZyZXF1ZW50IGxldHRlciBvciAmbHNxdW87PyZyc3F1bzsgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgbW9zdCBmcmVxdWVudCBsZXR0ZXJzLCBpbiBvbmUgbGluZS4mbmJzcDs8XC9wPlxyXG4iLCJoaW50IjoiIiwib3JpZ2luYWwiOiIxIiwiaHRtbF90aXRsZSI6IjAiLCJwcm9ibGVtX2xhbmdfdGNvZGUiOiJFbmdsaXNoIn1d

출처

ICPC > Regionals > Asia Pacific > Korea > Nationwide Internet Competition > Seoul Nationalwide Internet Competition 2008 A번