사이냅소프트 채용 퀴즈 2번

어제 이력서를 제출했던 사이냅 소프트의 채용퀴즈입니다.
7문제중 2문제를 풀면 지원이 가능하고 5문제 이상을 풀면 바로 실무자 면접으로 들어간다고 하였습니다.
저는 6문제를 풀었다....고 생각해서 보냈는데 확인해보니 1문제가 틀렸습니다. ㅜㅜ
너무 쉽게 풀었다고 생각했던 문제인데 알고보니 경우의 수에 따라 잘못된 값이 나올 수 있었습니다.
아아...나머지 5문제에도 혹시 문제가 있지는 않을까 걱정됩니다.

그리하여 어쨋든.
제가 풀어본 5문제를 올려봅니다.

문제는 http://synap.tistory.com/entry/2009년도-신입-및-경력사원-모집을-위한-퀴즈 에 있습니다.


2번 문제 - 문자를 보내자.
소문자 a~z와 공백을 휴대폰과 같은 입력시스템에서 어떤 문장을 입력하려면 몇 번을 눌러야 하는지 구하는 문제였습니다.


가장 쉬웠던, 그래서 내가 잘못 이해했는가, 다른 방법이 있는게 아닌가, 함정이 있는건 아닌가 생각했던 문제입니다.

------------------
|       | abc | def |
-----------------
| ghi  |  jkl | mno |
---------------------
| pqrs | tuv | wxyz |
---------------------
|       | <SP>|         |
---------------------
“c” 를 입력하기 위해서는 “abc” 키를 세번 입력해야 한다.
“ce” 를 입력하기 위해서는 “abc” 키를 세번, “def” 키를 두번 입력한다.
“ca” 를 입력하기 위해서는 “abc” 키를 세번, “abc”키를 한번 입력한다.
“a a”를 입력하기 위해서는 “abc” 키를 한번, <SP>키를 한번, “abc”키를 한번 입력한다.

저는 테이블을 사용하였습니다.
int alphaT[26] = { 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 1, 2, 3, 4 };

그리고 문자를 한 개씩 읽어 몇 번째 알파벳인지 바꾸었습니다.
    c = fgetc(infile);
  while(c != '\n') // 개행문자를 만날 때까지 반복합니다.
  {
   if( c == ' ' )
    result += 1;
   else
    result += alphaT[c - 'a']; 
   c = fgetc(infile);
   if(c == EOF)
   {
    break;
   }
result는 0으로 초기화된 int형 변수입니다.
공백이 나오면 1을 더하고, 아닐 경우 알파벳의 위치에 저장된 테이블의 값을 더합니다.
그러고나면 또 한 문자를 읽고 반복합니다.
개행문자를 만나거나 EOF를 만나면 while을 탈출합니다.
그 다음은 result의 값을 출력하면 끝.

by 퓨리넬 | 2009/04/28 11:27 | 프로그래밍수련 | 트랙백 | 덧글(2)

트랙백 주소 : http://p5ydhcw.egloos.com/tb/4910456
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by 오린간 at 2009/07/13 17:42
훌륭하고 도움이 많이 되는 자료네요.
이런건 함부로 포스팅 하기가. 참 여러가지로 귀찮고 위험해서 안하는 편인데,
링크해 갑니다.
Commented by 라떼군 at 2009/09/17 12:22
만약 'aa' 이런걸 입력하려면
a<sp>a 이렇게 입력해서 총 3번 입력해야되지 않을까요?

:         :

:

비공개 덧글

◀ 이전 페이지 다음 페이지 ▶