Skip to content

algorithm wertyu

Jongbin Oh edited this page Jun 8, 2013 · 1 revision

ParkPD

  • 한 번에 Accepted. 왠 일이래...

      /* @JUDGE_ID:parkpd 10038 C "test" */
      
      /* @BEGIN_OF_SOURCE_CODE */
      
      #include <iostream>
      #include <vector>
      #include <set>
      #include <string>
      #include <strstream>
      
      using namespace std;
      
      bool IsInRange(int value, int from, int to)
      {
      	return (from <= value) && (value <= to);
      }
      
      //#define _UNIT_TEST
      
      #ifdef _UNIT_TEST
      
      #include "../UnitTest++/src/UnitTest++.h"
      
      int main()
      {
      	UnitTest::RunAllTests();
      
      	char temp;
      	cin >> temp;
      
      	return 0;
      }
      
      #endif
      
      // code implement
      
      class CKeyMap
      {
      public:
      	static char FindNextKey(char input, char& output);
      	static bool FindNextKey(const string& str, char input, char& output);
      	static string ConvertString(const string& input);
      	static bool ConsoleTest(istream& input, ostream& output);
      
      	const static string KeyboardLine[4];
      };
      
      const string CKeyMap::KeyboardLine[4] = {	
      	string("`1234567890-="),
      	string("QWERTYUIOP[]\\"),
      	string("ASDFGHJKL;'"),
      	string("ZXCVBNM,./")
      };
      
      char CKeyMap::FindNextKey(char input, char& output)
      {
      	if (' ' == input)
      	{
      		output = ' ';
      		return true;
      	}
      
      	for (int i = 0; i < 4; ++i)
      	{
      		if (FindNextKey(KeyboardLine[i], input, output))
      		{
      			return true;
      		}
      	}
      
      	return false;
      }
      
      bool CKeyMap::FindNextKey(const string& str, char input, char& output)
      {
      	string::size_type it = str.find(input);
      	if ((it != string::npos) && (it != 0))
      	{
      		output = str[it - 1];
      		return true;
      	}
      
      	output = '?';	// 절대 나오지 않는 키
      	return false;
      }
      
      string CKeyMap::ConvertString(const string& input)
      {
      	char o;
      	string output;
      
      	for (size_t i = 0; i < input.size(); ++i)
      	{
      		if (FindNextKey(input[i], o))
      		{
      			output.push_back(o);
      		}
      		else
      		{
      			return "\n";
      		}
      	}
      
      	output.push_back('\n');
      	return output;
      }
      
      bool CKeyMap::ConsoleTest(istream& input, ostream& output)
      {
      	string inputString;
      	while (getline(input, inputString))
      	{
      		string outputString = ConvertString(inputString);
      		output << outputString;
      	}
      
      	return true;
      }
      
      #ifndef _UNIT_TEST
      
      int main()
      {
      	CKeyMap::ConsoleTest(cin, cout);
      
      	return 0;
      }
      
      #else
      
      // tests
      
      struct FixtureKeyMap : public CKeyMap
      {
      	char output;
      
      	stringstream testCin;
      	stringstream testCout;
      };
      
      TEST_FIXTURE(FixtureKeyMap, FindNextKey)
      {
      	string test = "tesp";
      
      	CHECK(FindNextKey(test, 'e', output));
      	CHECK_EQUAL('t', output);
      
      	CHECK(FindNextKey(test, 's', output));
      	CHECK_EQUAL('e', output);
      
      	CHECK(FindNextKey(test, 'p', output));
      	CHECK_EQUAL('s', output);
      
      	CHECK(!FindNextKey(test, 't', output));
      	CHECK_EQUAL('?', output);
      }
      
      TEST_FIXTURE(FixtureKeyMap, FindNextKey1)
      {
      	CHECK(FindNextKey('1', output));
      	CHECK_EQUAL('\'', output);
      }
      
      TEST_FIXTURE(FixtureKeyMap, FindNextKey_Except)
      {
      	CHECK(FindNextKey(' ', output));
      	CHECK_EQUAL(' ', output);
      }
      
      TEST_FIXTURE(FixtureKeyMap, ConvertString)
      {
      	string output = ConvertString("O S, GOMR YPFSU/");
      	CHECK_EQUAL("I AM FINE TODAY.", output);
      }
      
      TEST_FIXTURE(FixtureKeyMap, ConsoleTest)
      {
      	testCin << "O S, GOMR YPFSU/\n";
      	ConsoleTest(testCin, testCout);
      
      	CHECK_EQUAL("I AM FINE TODAY.", testCout.str());
      }
      
      #endif
      
      /* @END_OF_SOURCE_CODE */
    
    
      /* @JUDGE_ID:parkpd 10038 C "test" */
      
      /* @BEGIN_OF_SOURCE_CODE */
      
      #include <iostream>
      #include <vector>
      #include <set>
      #include <strstream>
      #include <algorithm>
      #include <string>
      
      using namespace std;
      
      //#define _UNIT_TEST
      
      #ifdef _UNIT_TEST
      
      #include "../UnitTest++/src/UnitTest++.h"
      
      int main()
      {
      	UnitTest::RunAllTests();
      
      	char temp;
      	cin >> temp;
      
      	return 0;
      }
      
      #endif
      
      class CKeyboard
      {
      public:
      	static void TestConsole(istream& input, ostream& output);
      	static string ConvertString(string input);
      	static bool ConvertByString(const string& str, char c, char& out);
      	static char ConvertChar(char in);
      
      	const static string m_ConvertTable[4];
      };
      
      const string CKeyboard::m_ConvertTable[] =
      {
      	string("`1234567890-="),
      	string("QWERTYUIOP[]\\"),
      	string("ASDFGHJKL;'"),
      	string("ZXCVBNM,./")
      };
      
      void CKeyboard::TestConsole(istream& input, ostream& output)
      {
      	string inputString;
      	while (getline(input, inputString))
      	{
      		string outputString = ConvertString(inputString);
      		output << outputString << endl;
      	}
      }
      
      string CKeyboard::ConvertString(string input)
      {
      	transform(
      		input.begin(), input.end(), 
      		input.begin(),
      		&ConvertChar);
      
      	return input;
      }
      
      bool CKeyboard::ConvertByString(const string& str, char in, char& out)
      {
      	if (in == ' ')
      	{
      		out = ' ';
      		return true;
      	}
      
      	int index = (int)str.find(in, 1);
      	if (index != string::npos)
      	{
      		out = str[index - 1];
      		return true;
      	}
      
      	out = '?';
      	return false;
      }
      
      char CKeyboard::ConvertChar(char in)
      {
      	char out;
      	for (int i = 0; i < 4; ++i)
      	{
      		if (ConvertByString(m_ConvertTable[i], in, out))
      		{
      			return out;
      		}
      	}
      
      	return '?';
      }
      
      #ifndef _UNIT_TEST
      
      int main()
      {
      	CKeyboard::TestConsole(cin, cout);
      	return 0;
      }
      
      #else
      
      TEST_FIXTURE(CKeyboard, ConvertByString)
      {
      	string test = "ABCD";
      	char output;
      	CHECK(ConvertByString(test, 'C', output));
      	CHECK_EQUAL('B', output);
      
      	CHECK(!ConvertByString(test, 'A', output));
      	CHECK_EQUAL('?', output);
      
      	CHECK(!ConvertByString(test, 'E', output));
      	CHECK_EQUAL('?', output);
      
      	CHECK(ConvertByString(test, ' ', output));
      	CHECK_EQUAL(' ', output);
      }
      
      TEST_FIXTURE(CKeyboard, ConvertChar)
      {
      	CHECK_EQUAL('I', ConvertChar('O'));
      	CHECK_EQUAL('?', ConvertChar('?'));
      }
      
      TEST(TestConsole)
      {
      	stringstream input;
      	stringstream output;
      	input << "O S, GOMR YPFSU/";
      	CKeyboard::TestConsole(input, output);
      	CHECK_EQUAL("I AM FINE TODAY.", output.str());
      };
      
      #endif
      
      /* @END_OF_SOURCE_CODE */
    

kukuman

  • 저도 처음으로 Accept 받아봤네요

  • 소스

      import java.io.BufferedReader;
      import java.io.IOException;
      import java.io.InputStreamReader;
      import java.util.HashMap;
      import java.util.Map;
      
      
      public class Main {
      	private Map<Character, Character> map = new HashMap<Character, Character>();
      	private final String [] sources = {
      			"`1234567890-=",
      			"QWERTYUIOP[]\\",
      			"ASDFGHJKL;'",
      			"ZXCVBNM,./",
      			"  " };
      	public Main(){
      		initMap();
      	}
      
      	private void initMap(){
      		for(String source : sources ){
      			for(int i=1;i<source.length();i++){
      				map.put(source.charAt(i), source.charAt(i-1));
      			}
      		}
      	}
      	
      	public Character get(Character key) {
      		Character result = map.get(key);
      		if(result == null){
      			result = new Character(' ');
      		}
      		return result;
      	}
      	
      	public String transString(String source){
      		StringBuilder builder = new StringBuilder();
      		for(int i =0;i<source.length();i++){
      			builder.append( map.get(source.charAt(i)));
      		}
      		return builder.toString();
      	}
      	
      	public static void main(String[] args) {
      		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
      		try {
      			String line ;
      			while((line = reader.readLine())!=null){
      				
      				Main transfer = new Main();
      				System.out.println(transfer.transString(line));
      			}
      		} catch (IOException e) {
      			// TODO Auto-generated catch block
      			e.printStackTrace();
      		}
      	}
      }
    
  • Test Case

      import junit.framework.TestCase;
      
      
      public class TransferTestCase extends TestCase {
      	public void testTransCharacter(){
      		Main map = new Main();
      		assertEquals(new Character('I'), map.get('O'));
      		assertEquals(new Character('P'), map.get('['));
      		assertEquals(new Character('-'), map.get('='));
      	}
      	
      	public void testTransString(){
      		Main map = new Main();
      		assertEquals("I AM FINE TODAY.", map.transString("O S, GOMR YPFSU/"));
      	}
      }
    

soomong

  • 쉬운것도 Wrong Answer 라는

    • Q 입력시 = 나온다고 가정하는게 맞는건지 모르겠네요 - 정희종
  • KeyboardMain.java

      import java.io.BufferedReader;
      import java.io.IOException;
      import java.io.InputStreamReader;
      
      public class KeyboardMain {
      
      	private String key = "`01234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./"; 
      	
      	public static void main(String[] args)
      	{
      		String in;
      		KeyboardMain k = new KeyboardMain();
      		
      		while((in = ReadLine()) != null)
      		{
      			System.out.println(k.reviseKey(in));
      		}
      	}
      	
      
      	public char reviseKeyChar(char in)
      	{
      		int index;
      		
      		if( in == ' ' || (index = key.indexOf(in)) == -1 )
      			return in;
      		else
      			return key.charAt(index-1);
      	}
      	
      	public String reviseKey(String in) 
      	{
      		String result=  "";
      		
      		for(int i=0; i< in.length(); i++)
      		{
      			char ch = this.reviseKeyChar(in.charAt(i));
      			result = result.concat(Character.toString(ch));
      		}
      	
      		return result; 
      	}	
      	
      	public static String ReadLine()
      	{
      		String data = null;
      		
      		try
      		{
      			BufferedReader is = new BufferedReader(new InputStreamReader(System.in));
      			data = is.readLine();
      		}
      		catch(IOException e)
      		{
      			System.out.println("IOException " +e);
      		}
      		
      		return data;		
      	}
      	
      }
    
  • KeyboardTest.java

      import junit.framework.TestCase;
      
      public class KeyboardTest extends TestCase {
      
      	KeyboardMain k = new KeyboardMain();
      	
      	public void testReviseKeyChar() {
      		assertEquals("1",k.reviseKeyChar('Q'),'=');
      		assertEquals("1",k.reviseKeyChar('W'),'Q');
      		assertEquals("1",k.reviseKeyChar('E'),'W');
      		assertEquals("1",k.reviseKeyChar('R'),'E');
      		assertEquals("1",k.reviseKeyChar('S'),'A');
      	}
      
      	public void testReviseKey() {
      		assertEquals("1","I AM FINE TODAY.",k.reviseKey("O S, GOMR YPFSU/"));
      		assertEquals("1","WHAT A WONDERFUL WORLD",k.reviseKey("EJSY S EPMFRTGI; EPT;F"));
      		assertEquals("1","TEST ONE MORE   [TIME]",k.reviseKey("YRDY PMR ,PTR   ]YO,R\\"));
      	}
      	
      }
    

itmentor

C++버전 Accept

    /* @JUDGE_ID:itmentor 110301 C "test" */
    
    /* @BEGIN_OF_SOURCE_CODE */
    
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
    	string srcString = " 1234567890-=WERTYUIOP[]\\SDFGHJKL;'XCVBNM,./";
    	string dstString = " `1234567890-QWERTYUIOP[]ASDFGHJKL;ZXCVBNM,.";
    
    	while(true)
    	{
    		char ln[512];
    		cin.getline(ln,512);
    
    		if( ln[0] == 0 )
    			break;
    
    		string buf = ln;
    		int bufSize = buf.size();
    		for(int i = 0 ; i < bufSize ; i++)
    		{
    			int index = srcString.find( buf[i] );
    			cout << dstString[index];
    		}
    		cout << std::endl;
    	}
    
    
    	return 0;
    }
    
    /* @END_OF_SOURCE_CODE */

C#버전

    using System;
    using System.Collections.Generic;
    using System.Text;
    
    namespace Alg
    {
        class Program
        {
            static void Main(string[] args)
            {
                char[] buf = Console.ReadLine().ToUpper().ToCharArray();
    
     	    string srcString = " 1234567890-=WERTYUIOP[]\\SDFGHJKL;'XCVBNM,./";
    	    string dstString = " `1234567890-QWERTYUIOP[]ASDFGHJKL;ZXCVBNM,.";
    
                foreach (char ch in buf)
                {
                    for (int i = 0; i < srcString.Length; i++)
                    {
                        if (ch == srcString[i])
                        {
                            Console.Write(dstString[i]);
                            break;
                        }
                    }
                }
            }
        }
    }

Clone this wiki locally