문제
당신은 길을 가다가 이상한 쪽지를 발견했다. 그 쪽지에는 암호가 적혀 있었는데, 똑똑한 당신은 암호가 뒤집으면 해독된다는 것을 발견했다.
이 암호를 해독하는 프로그램을 작성하시오.
입력
한 줄에 하나의 암호가 주어진다. 암호의 길이는 500을 넘지 않는다.
마지막 줄에는 "END"가 주어진다. (END는 해독하지 않는다.)
출력
각 암호가 해독된 것을 한 줄에 하나씩 출력한다.
5년전에 풀었던 문제이길래, 문제를 읽어보고 굉장히 쉽다고 생각하였다.
그렇게 내 제출 코드를 열어보니 이게 무슨일인가.
엄청나게 많은 틀렸습니다가 제 눈앞에 펼쳐졌습니다.
먼저 틀린 코드를 먼저 공개하겠습니다.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){
char w[10000];
int len;
while(1){
gets(w);
if(strcmp(w,"END")==0)
break;
len = strlen(w);
char t;
char e = len-1;
for(int i = 0; i < len/2 ;i++){
t=w[i];
w[i] = w[e];
w[e--] = t;
}
printf("%s",w);
}
}
여기까지 봤을 때는 어떤 코드가 틀린지 모르겠습니다.
이제 정답코드를 한번 봐보겠습니다.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
int main(){
char w[10000];
char res[100][10000];
int cnt = 0;
while(1){
gets(w);
if(strcmp(w,"END")==0)
break;
reverse(w,w+strlen(w));
strcpy(res[cnt++],w);
}
for(int i = 0 ; i < cnt ; i++){
printf("%s\n",res[i]);
}
}
아마 C++ 코드를 활용하면서, algorithm이라는 라이브러리를 사용할 수 있는지에 대해서 묻는 문제였던 것 같습니다.
코딩테스트를 준비하고 계신 분들이라면,
주최기관에서 허가해주는 라이브러리가 어떤 것인지 파악해보고
시험문제 풀이공부를 하는 것은 필수적이라고 할 수 있습니다.
그 이유는 알고리즘 문제 시험에서 허가해주는 라이브러리 리스트는
시험문제에 대한 힌트와도 동일하기 때문입니다.
주최기간에서 우리는 이번 코딩테스트에서 A 라이브러리를 허가합니다.
라는 말의 뜻은. 우리는 이번 코딩 테스트에서 A 라이브러리를 활용해서 문제 풀이를 해야됩니다.
라는 말과 동일하다고 보면 됩니다.
위 문제에서 algorithm 라이브러리는 문자열의 위치를 변경해주는 함수를 포함하고 있었기 때문에
이를 알았더라면 간단하게 풀 수 있는 문제였습니다.
아마 처음에는 swap으로 풀려고 했었기 때문에 오답이 나왔던 것 같습니다.
이상 다이어릿이었습니다. 감사합니다.