🤯 코딩테스트/C/C++

[it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비] 코드구현력 기르기 - 영어단어 복구

kangkibong 2022. 8. 21. 18:18

문제

현수의 컴퓨터가 바이러스에 걸려 영어단어가 뛰어쓰기와 대소문자가 혼합되어 표현된다. 예를 들면 아름다운 이란 뜻을 가지고 있는 beautiful 단어가 “bE au T I fu L” 과 같이 컴퓨터에 표시되고 있습니다. 위와 같이 에러로 표시되는 영어단어를 원래의 표현대로 공백을 제거하고 소문자화 시켜 출력하는 프로그램을 작성하세요.

💡 입력설명
첫 줄에 바이러스에 걸린 영어단어가 주어진다. 바이러스에 걸린 영어단어의 길이(공백포함)는 100을 넘지 않는다. 문자사이의 공백은 연속적으로 존재할 수 있습니다. 입력은 알파벳과 공 백만 주어집니다.

💡 출력설명
첫 줄에 소문자로 된 정상적인 영어단어를 출력한다.

💡 입력예제
bE au T I fu L

💡 출력예제
beautiful

 


코드

최종 풀이

#include <stdio.h>

int main() {
	int i;
	char a[100];
	scanf("%[^\n]s", &a);
	for (i = 0; a[i] != '\0'; i++) {
		if(a[i] >= 65 && a[i] <= 90) {
			printf("%c", a[i] + 32);
			continue;
		}
		if(a[i] == ' '){
			continue;
		}
		printf("%c", a[i]);
	}
	return 0;
}

 


설명

scanf를 통해 %s를 입력 받으면 공백문자를 받을 수 없기 때문에 scanf("%[^\n]s, %a)를 통해 공백문자를 포함하여 배열 a에 할당한다.

배열 a에서 문자열까지 순회하기 위해 item이 NULL이 아닐 때 까지 반복하는 for문을 작성한다.

이후 item이 아스키코드 65~90(대문자)에 속할 경우 item에 +32를 하여 소문자로 변환하여 출력 후 continue하여 for문을 다시 시작한다.

또한 item이 공백문자일 경우도 continue해준다. 이후 위 조건문에 해당하지 않으면 원래의 item을 출력한다.

 


배운 점

1. 공백문자를 포함하여 입력받고 싶을 경우 scanf("%[^n]s, &a);를 사용한다.

2. 아스키코드는 소문자(97~122), 대문자(65~90)이다.

 


 

해당 내용은 김태원님의 'it 취업을 위한 알고리즘 문제풀이' 강의를 듣고 작성한 글입니다.