알고리즘/it 취업을 위한 알고리즘 문제풀이
7.영어단어 복구
고줭
2021. 5. 12. 00:03
문제
현수의 컴퓨터가 바이러스에 걸려 영어단어가 뛰어쓰기와 대소문자가 혼합되어 표현된다.
예를 들면 아름다운 이란 뜻을 가지고 있는 beautiful 단어가 “bE au T I fu L” 과 같이 컴퓨터에 표시되고 있습니다.
위와 같이 에러로 표시되는 영어단어를 원래의 표현대로 공백을 제거하고 소문자화 시켜 출력하는 프로그램을 작성하세요.
입력설명
첫 줄에 바이러스에 걸린 영어단어가 주어진다. 바이러스에 걸린 영어단어의 길이(공백포함)는 100을 넘지 않는다. 문자사이의 공백은 연속적으로 존재할 수 있습니다. 입력은 알파벳과 공백만 주어집니다.
출력설명
첫 줄에 소문자로 된 정상적인 영어단어를 출력한다.
입력예제
bE au T I fu L
출력예제
beautiful
#include <stdio.h>
using namespace std;
int main(){
freopen("input.txt", "rt", stdin);
char input[101], output[101];
int i, index=0;
gets(input);
for(i=0; input[i]!='\0'; i++){
if(input[i] != ' '){
if(input[i] >= 65 && input[i] <= 90){
output[index++] = input[i] + 32;
} else {
output[index++] = input[i];
}
}
}
output[index]='\0';
printf("%s", output);
return 0;
}
이번엔 scanf()가 아니라 gets로 받았습니다. 공백이 있는 문자를 받을땐 gets로 받아야 한다고 합니다.
문자열은 100을 넘지 않는다고 하지만 전 항상 1정도는 더 넣습니다.
선생님이 쓰신 변수랑은 다르게 나름 제 방식대로 써봤는데 가독성이 좋을지는 모르겠습니다.
문제 풀이의 핵심은 대문자와 소문자의 아스키코드가 아닐까 합니다.
대문자는 65이상 90이하이고 대문자에 + 32을 하면 소문자가 됩니다.
문자배열이므로 for문이 끝나고 output[index] ='\0'; 하는걸 잊지말아야 할듯 합니다.