본문 바로가기
카테고리 없음

백준 10798번 - 세로읽기 C++

by 안알랴줌. 2019. 8. 4.

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

 

10798번: 세로읽기

총 다섯줄의 입력이 주어진다. 각 줄에는 최소 1개, 최대 15개의 글자들이 빈칸 없이 연속으로 주어진다. 주어지는 글자는 영어 대문자 ‘A’부터 ‘Z’, 영어 소문자 ‘a’부터 ‘z’, 숫자 ‘0’부터 ‘9’ 중 하나이다. 각 줄의 시작과 마지막에 빈칸은 없다.

www.acmicpc.net

문제는 총 다섯줄의 단어를 입력받고 이 입력받은 단어를 세로로 읽는 문제이다.

단어당 최대 15자리 단어를 입력받을수 있는 15x5 배열을 하나 선언한다.

문자열 을 입력받고 문자열길이만큼 배열에 저장을 한다.

 

출력은 입력받을때와 반대로 하면 되는데 이때 주의사항이 있다.

필자는 이것때문에 많은 고생을 했는데 알고보니 간단한 문제였다.

전역변수로 선언한 board 배열에 저장된 문자를 출력할때 최대 15문자가 저장되있지않으면 출력시 수많은 널문자를

출력한다. 이것은 눈에 보이지않기에 왜 틀렸는지 알수없었다.

그래서 이 널문자가 있을경우에 continue를 통해 출력을 하지않도록 하는것이 중요하다.

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <functional>
#include <vector>
#include <stack>
#include <queue>

using namespace std;

char board[16][5];

int main(void)
{
    string a;
    for(int i=0; i<5; ++i) {
        cin >> a;
        for(int j=0; j<a.size(); ++j) {
            board[j][i] = a[j];
        }
    }

    for(int j=0; j<15; ++j) {
        for(int i=0; i<5; ++i) {
                if (board[j][i] == '\0')
                    continue;
            cout << board[j][i];
            
        }
    }
    
    return 0;
}

댓글