12605: 단어 순서 뒤집기
2022. 9. 11. 23:15ㆍC언어/백준
자료구조
브론즈 2
https://www.acmicpc.net/problem/12605
12605번: 단어순서 뒤집기
스페이스로 띄어쓰기 된 단어들의 리스트가 주어질때, 단어들을 반대 순서로 뒤집어라. 각 라인은 w개의 영단어로 이루어져 있으며, 총 L개의 알파벳을 가진다. 각 행은 알파벳과 스페이스로만
www.acmicpc.net
-결과
-코드
#include <stdio.h>
void initialize(char* ch);
int main() {
char ch[100] = { 0 }, * pch, * startp;
pch = ch;
int i = 0, pchidx = 0, case_num = 1;
int startidx = 0, endidx = 0;
int N;
scanf("%d", &N);
getchar();
while (N--) {
initialize(ch);
pch = ch;
pchidx = 0;
scanf("%c", pch);
while (*pch != '\n' && *pch != '.' && *pch != '!') {
pch++;
pchidx++;
scanf("%c", pch);
}
printf("Case #%d: ", case_num);
case_num++;
endidx = pchidx - 1;
for (i = pchidx - 1; i >= 0; i--) {
if (i == 0) {
startidx = i;
for (int j = startidx; j <= endidx; j++) {
printf("%c", ch[j]);
}
}
else if (ch[i] == ' ') {
startidx = i;
for (int j = startidx + 1; j <= endidx; j++) {
printf("%c", ch[j]);
}
printf(" ");
endidx = startidx - 1;
}
}
printf("\n");
}
return 0;
}
void initialize(char* ch) {
for (int i = 0; i < 100; i++) {
*ch = 0;
ch++;
}
}
-풀이
스페이스를 이용해서 단어와 단어를 구분지어야 한다.
그리고 문장의 단어들을 반대로 나열해야 하기 때문에 각 단어들의 start point와 end point 변수를 선언한 후에,
공백이 나타나면 각 포인트를 다시 이동해가면서 출력하도록 설정해야 한다.
그러기 위해서 배열을 사용하여 작성해야 한다.
또한 getchar() 함수를 이용하여 \n가 올 때까지 문자를 입력받아 버퍼에 저장하도록 하여 단어를 분리하도록 해야한다.
'C언어 > 백준' 카테고리의 다른 글
10815: 숫자 카드 (0) | 2022.09.24 |
---|---|
17608: 막대기 (0) | 2022.09.11 |
1075: 나누기 (0) | 2022.09.11 |
2506: 점수계산 (0) | 2022.08.25 |
2455: 지능형 기차 (0) | 2022.08.25 |