본문 바로가기
프로그램/C언어 1000제

C언어 207제] WERTYU

by 건티 2025. 1. 2.
728x90

 

출처 : 반크_백제역사 유적지구와 이스탐블역사 유적지구

 

문제]

타이핑을 하다 보면 키보드에서 양손을 모두 원래 위치보다 오른쪽으로 한 칸 이동한 상태에서 키를 눌러서 오타가 나오는 경우가 종종 있다. 그러면 'Q'는 'W', 'J'는 'K' 같은 식으로 오른쪽에 있는 키가 입력된다. 이런 식으로 입력된 메시지가 주어졌을 때 원래 메시지로 복구시켜야 하는 임무가 주어졌다.

입력
입력은 여러 줄의 텍스트로 구성된다. 각 줄에는 숫자, 스페이스, 대문자('Q', 'A', 'Z' 제외), 위에 나와있는 구두 기호(역 따옴표 '`' 제외)가 들어갈 수 있다. 단어가 붙어있는 키(Tab, BackSp, Control 등)는 입력에 들어있지 않다.

출력
위에 나와있는 QWERTY 키보드를 기준으로 하여 각 글자나 기호를 바로 왼쪽에 있는 키에 해당하는 글자나 기호로 바꿔야 한다. 입력에 있는 스페이스는 그대로 둔다.

입력 예
O S, GOMR YPFSU/

출력 예
I AM FINE TODAY.



출처]
Programming Challenges 알고리즘 트레이닝 북(한빛미디어) : 문제 17 WERTYU p96

 

참고풀이]

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

const char *KeyBoard[4]={"`1234567890-=", "QWERTYUIOP[]\\",
                         "ASDFGHJKL;", "ZXCVBNM,./"};
                   
int main()
{
   int i,j,k;
   int chk;
   char Str[500];

   while(!feof(stdin))
   {
      if(!gets(Str)) break;

      for(i=0;i<strlen(Str);i++)
      {
         chk=0;
         if(Str[i]==' ')
            putchar(' ');
         else
         {
            for(j=0;j<4;j++)
            {
               for(k=1;k<strlen(KeyBoard[j]);k++)
                  if(KeyBoard[j][k]==Str[i])
                  {
                     putchar(KeyBoard[j][k-1]);
                     chk=1;
                     break;
                  }
               if(chk) break;
            }
         }
      }
      putchar('\n');
   }
   return 0;
}

 

참고풀이 결과]

 

 

 

 

 

대한민국의 아름다운 영토, 독도의 가을

 

반응형

댓글