학습 정리/👨‍💻 PS Study

[C] 백준 1283번 - 단축키 지정

무딘붓 2022. 7. 8. 23:32

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

 

1283번: 단축키 지정

첫째 줄에 옵션의 개수 N(1 ≤ N ≤ 30)이 주어진다. 둘째 줄부터 N+1번째 줄까지 각 줄에 옵션을 나타내는 문자열이 입력되는데 하나의 옵션은 5개 이하의 단어로 표현되며, 각 단어 역시 10개 이하

www.acmicpc.net

(21.08.14)

 

1283번: 단축키 지정 - C언어 풀이

 

[소스코드]

#include <stdio.h>
#include <string.h>
// [baekjoon] 1283번 - 단축키 지정

int make_tmp(char i) {
	int tmp = 0;
	if (i >= 'A'&&i <= 'Z') tmp = i + 32;
	else if (i >= 'a'&&i <= 'z') tmp = i;
	return tmp;
}

int main() {

	char s[31][200];

	int check[200] = { 0 };
	int n, i, j;

	scanf("%d", &n);
	getchar();

	for (i = 0; i < n; i++) {
		gets(s[i]);
	}
	
	for (i = 0; i < n; i++) {
		int dan_num = -1;
		for (j = 0; j < strlen(s[i]); j++) {
			if (j == 0) {
				if (s[i][j] != ' ' && check[make_tmp(s[i][j])] == 0) {
					check[make_tmp(s[i][j])] = 1;
					dan_num = j;
					j = 100;
				}
			}
			else if (s[i][j] != ' ' && s[i][j - 1] == ' ') {
				if (check[make_tmp(s[i][j])] == 0) {
					check[make_tmp(s[i][j])]++;
					dan_num = j;
					j = 100;
				}
			}				
		}
		if (dan_num == -1) {			
			for (j = 0; j < strlen(s[i]); j++) {
				if (s[i][j] != ' ') {
					if (check[make_tmp(s[i][j])] == 0) {
						check[make_tmp(s[i][j])]++;
						dan_num = j;
						j = 100;
					}
				}

			}
		}
		for (j = 0; j < strlen(s[i]); j++) {
			if (j == dan_num) printf("[%c]", s[i][j]);
			else printf("%c", s[i][j]);
		}
		printf("\n");
	}

}

풀면서 공부했던 내용 정리해보면
- 문자열 입력받기 전에 엔터값 지우고자 getchar(); 사용
- 문자열 길이 반환하는 함수 strlen() 사용
- * 공백있는 문자열 입력받기 위해서 scanf 대신 gets(); 사용

gets()는 엔터('\n')가 입력될 때까지 입력된 모든 문자들을 저장하는 함수