💻STUDY/BOJ
[BOJ] 9093. 단어 뒤집기 (C)
- 코딩 초보
9093. 단어 뒤집기
문장이 주어졌을 때, 단어를 모두 뒤집어서 출력하는 프로그램을 작성하시오. 단, 단어의 순서는 바꿀 수 없다. 단어는 영어 알파벳으로만 이루어져 있다.
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 단어의 길이는 최대 20, 문장의 길이는 최대 1000이다. 단어와 단어 사이에는 공백이 하나 있다.
각 테스트 케이스에 대해서, 입력으로 주어진 문장의 단어를 모두 뒤집어 출력한다.
#include <stdio.h>
main() {
int t,temp;
scanf("%d\n", &t);
for (int i = 0; i < t; i++) {
char s[1001] = { 0, };
gets(s);
for (int j = 0,k=0; ;) {
if (s[j]==' ') {
temp = j+1;
while (k != j) {
j--;
printf("%c", s[j]);
}
k = temp;
j = temp;
printf(" ");
}
else if (s[j] != ' ' && s[j]!='\0') {
j++;
}
else if (s[j] == '\0') {
while (k != j) {
j--;
printf("%c", s[j]);
}
break;
}
}
printf("\n");
}
}
공백문자나 \0이 아닌 다른 문자열이 오면 인덱스 j를 증가시켜서 단어 하나의 위치를 잡아주고, k는 단어의 첫번째 부분을 기억하도록 한다. 맨 끝 단어가 아닌 경우, temp에 다음 단어의 시작 인덱스를 저장해두고, j를 감소시켜 k와 같아질때까지 감소시키고, 해당 인덱스의 문자를 출력하도록 한다. 단어 하나 출력이 끝나면 공백문자를 하나 출력하고 k와 j의 시작점을 다시 임시 저장해주었던 temp로 배정해준다.
만약 끝 단어의 경우, temp가 필요없이 j를 k가 같아질때까지 감소시킨후 출력하도록 하면 된다. 그리고 break 하도록 한다.
'💻STUDY > BOJ' 카테고리의 다른 글
[BOJ] 5585. 거스름돈 (C) (0) | 2022.03.10 |
---|---|
[BOJ] 14647. 준오는 조류 혐오야! (C) (0) | 2022.03.09 |
[BOJ] 11653. 소인수분해 (C) (0) | 2022.03.07 |
[BOJ] 5622. 다이얼 (C) (0) | 2022.03.06 |
[BOJ] 11721. 열 개씩 끊어 출력하기 (C) (0) | 2022.03.05 |
댓글