본문 바로가기

백준

10798)세로읽기

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


5개의 문자열이 주어지면 각 문자열의 i번째 낱말로 세로 단어를 만들고 이를 이어붙여 출력하는 문제다.


C언어는 문자열의 끝이 NULL로 끝난다.


각 문자열의 길이가 달라 어떤 문자열의 i번째 낱말이 NULL일 수 있다.


이 경우 무시하고 넘어간다.


i번째 낱말이 NULL이 아니면 verticalWord[t]에 넣고 t를 하나 증가시켜준다.


이를 출력해야하므로 마지막에는 NULL을 저장한다.


각 문자열을 저장할 때 배열에는 가비지 값이 있었다.


만약 이 길이를 다 채우지 못하는 문자열을 받고 세로 단어를 만들 때


가비지 값은 NULL이 아니기 때문에 가비지 값도 세로단어의 낱말로 취급된다.


그래서 배열을 할당할 당시 배열을 NULL로 초기화해야 한다. 


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
#include<stdio.h>
#define WORD_NUMS 5
#define MAX_LENGTH 15
 
int main() {
    char word[WORD_NUMS][MAX_LENGTH + 1= {NULL};
    char verticalWord[WORD_NUMS+1];
    int t = 0;
 
    for (int i = 0; i < WORD_NUMS;i++) {
        scanf("%s",word[i]);
    }
 
    for (int i = 0; i < MAX_LENGTH;i++) {
        for (int j = 0; j < WORD_NUMS; j++) {
            if(word[j][i]!=NULL) verticalWord[t++= word[j][i];
        }
        verticalWord[t] = NULL;
        printf("%s",verticalWord);
        t = 0;
    }
    printf("\n");
    
    system("pause");
    return 0;
}
cs


'백준' 카테고리의 다른 글

2563)색종이  (0) 2019.02.02
1789)수들의 합  (0) 2019.02.02
6376)e 계산  (0) 2019.02.02
4659)비밀번호 발음하기  (0) 2019.02.02
3460)이진수  (0) 2019.02.01