STUDY/Algorithm

[백준] 11365 !밀비 급일, C/C++

sinawi95 2022. 2. 4. 12:29
728x90

https://www.acmicpc.net/problem/11365

 

11365번: !밀비 급일

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

www.acmicpc.net

굉장히 쉬운문제이다.

파이썬으로 풀면 다음처럼 풀수있다.

while 1:
	s=input()
    if s=="END":
    	break
    print(s[::-1])

이렇게 넘어가기엔 너무 양심이 없는거같아서 오랜만에 C/C++로 접근했다.

처음엔 C++로 풀었는데 cin은 개행문자뿐만아니라 whitespace(' ', '\t', '\n')가 나오면 입력을 멈추기때문에 원하는 값을 얻을수 없었다.

그래서 scanf를사용해서 구현했다.

scanf("%[^\n]s", s)로 사용하면 \n가 나오기전까지 모든 값을 받아올수 있었는데 문자열에 계속 이전 값이 남아서 버퍼를 지우기 위해 앞에 공백을 추가했다. scanf(" %[^\n]s", s)

#define _CRT_SECURE_NO_WARNINGS
#include<cstdio>

int main() {
	//ios::sync_with_stdio(false);
	//cin.tie(NULL); cout.tie(NULL);
	char s[501], tmpc;
	int tmp = 0, null_ind, i;
	while (1) {
		scanf(" %[^\n]s", s);
		if (s[0] == 'E' && s[1] == 'N' && s[2] == 'D' && s[3] == '\0') break;

		// find s.end()
		null_ind = 0;
		for (i = 0; i < 501; i++)
		{
			if (s[i] == '\0'){
				null_ind = i;
				break;
			}
		}
		//reverse(s.begin(), s.end());
		for (i = 0; i < null_ind / 2; i++)
		{
			tmpc = s[i];
			s[i] = s[null_ind - 1 - i];
			s[null_ind - 1 - i] = tmpc;
		}

		// cout << s << '\n';
		printf("%s\n", s);

	}

	return 0;
}

https://yahohococo.tistory.com/9

 

[C] scanf로 공백포함 문자열 입력받기

 공백을 포함한 문자열을 받을 때, scanf("%s")로는 해결되지 않습니다. 스페이스 또한 입력의 끝으로 받기 때문입니다.  그 때마다 필연적으로 gets를 쓸 수 밖에 없는데, scanf만을 이용해 공백까지

yahohococo.tistory.com