백준 Baekjoon

[C언어] 백준 9557 : Arabic and English

sujo 2020. 7. 20. 15:20

백준 9557 : Arabic and English

 

문제 링크

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

 

9557번: Arabic and English

Some computer programs have problems in displaying Arabic text, especially when mixed with English words in the same line, because Arabic is written from right to left and English is written from left to right. In this problem we will try to fix a text wit

www.acmicpc.net

 

문제 내용

(요약) 한 줄에 아랍어 '#'으로 이루어진 단어와 소문자로 이루어진 단어들이 있는 경우, 영단어를 중심으로 앞과 뒤의 단어들 위치를 교환한다. 영단어는 최대 1개이고 없을 수도 있다.

ex)

# ### abc ##

→ ## abc # ###

아랍어와 영단어는 최대 10글자이다.

 

 

Idea

결과적으로는 단순히 영문자를 기준으로 앞과 뒤의 위치를 교환하라는 문제이다.

alpha라는 변수를 이용하여 테스트케이스에 영단어가 있을 경우 해당 인덱스를 표시하고, 없다면 -1로 표시한다.

이 alpha를 for문과 적절히 활용하여 원하는 문장을 출력할 수 있도록 한다.

 

 

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <stdio.h>
#include <ctype.h>
 
int main() {
    char str[100][11];
    int T, N;
    scanf("%d"&T);
    
    int i, alpha = -1;
    //T개의 테스트케이스
    while (T--) {
        alpha = -1;//소문자가 있는 인덱스 표시
        scanf("%d"&N);
        for (i = 0; i < N; i++) {
            scanf("%s", str[i]);
 
            //소문자라면 해당 인덱스 위치를 저장
            if (isalpha(str[i][0])) alpha = i;
        }
        //소문자가 없을 때,
        if (alpha == -1) {
            for (i = 0; i < N; i++printf("%s ", str[i]);
            printf("\n");
        }
        else {//소문자가 존재할 때,
            for (i = alpha + 1; i < N; i++)
                printf("%s ", str[i]);
            printf("%s ", str[alpha]);
            for (i = 0; i < alpha; i++)
                printf("%s ", str[i]);
            printf("\n");
        }
    }
    return 0;
}
cs

 

line 18 : 소문자의 유무 판단

line 21 ~ 24 : 소문자가 존재하지 않을 경우

line 25 ~ 32 : 소문자가 존재할 경우

*최대 10글자여서 처음엔 생각없이 str[100][10]이라고 했다가 알고리즘은 맞는데 계속 틀려서 str[100][11]로 바꾸었더니 맞았습니다. 문자열의 마지막 부분엔 꼭 '\0'이 들어가야 한다는 사실을 잊지 마세요...