본문 바로가기

# 프로그래밍 개발/04. 알고리즘 문제풀이

백준 알고리즘 11365번 [!밀비 급일] 문제풀이코드 공개

반응형

문제

당신은 길을 가다가 이상한 쪽지를 발견했다. 그 쪽지에는 암호가 적혀 있었는데, 똑똑한 당신은 암호가 뒤집으면 해독된다는 것을 발견했다.

이 암호를 해독하는 프로그램을 작성하시오.

입력

한 줄에 하나의 암호가 주어진다. 암호의 길이는 500을 넘지 않는다.

마지막 줄에는 "END"가 주어진다. (END는 해독하지 않는다.)

출력

각 암호가 해독된 것을 한 줄에 하나씩 출력한다.

출처

High School > University of Virginia High School Programming Contest > UVa HSPC 2014 A번

  • 문제를 번역한 사람: onjo0127
  • 빠진 조건을 찾은 사람: sk7755

알고리즘 분류

 

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으로 풀려고 했었기 때문에 오답이 나왔던 것 같습니다. 

 

이상 다이어릿이었습니다. 감사합니다. 

반응형