기초 PS #boj 10798

0ne·2024년 1월 30일

Algorithm

목록 보기
7/22

문제

영석이는 칠판에 자석 글자들로 단어를 만들어 놀고 있습니다. 이 글자들은 영어 대문자(A-Z), 소문자(a-z), 숫자(0-9)로 이루어져 있습니다. 영석이는 칠판에 이 글자들을 수평으로 일렬로 붙여 다섯 개의 단어를 만듭니다. 각 단어는 최대 15개의 글자로 이루어져 있으며, 각 단어의 길이는 서로 다를 수 있습니다.

영석이는 이제 칠판에 만들어진 단어들을 세로로 읽기 시작합니다. 세로로 읽을 때, 각 단어의 첫 번째 글자들을 위에서 아래로 읽습니다. 그 다음에는 두 번째 글자들을 세로로 읽고, 이런 식으로 왼쪽에서 오른쪽으로 한 자리씩 이동하면서 동일한 자리의 글자들을 세로로 읽어 나갑니다. 만약 특정 자리에 글자가 없으면, 그 글자는 건너뛰고 다음 글자를 계속 읽습니다.

당신의 작업은 칠판에 붙여진 단어들이 주어졌을 때, 영석이가 세로로 읽은 순서대로 글자들을 연속해서 출력하는 프로그램을 작성하는 것입니다.

입력

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

출력

영석이가 세로로 읽은 순서대로 글자들을 출력한다. 이때, 글자들을 공백 없이 연속해서 출력한다

풀이

2차원 벡터는 "벡터의 벡터"이다. 이게 핵심이다.

#include <iostream>
#include <vector>
using namespace std;

#define FASTIO cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0);

int main() {
    FASTIO;
    vector<vector<char>> g(5);
    string input;

    for (int i = 0; i < 5; i++) {
        getline(cin, input);
        for (char ch : input) {
            g[i].push_back(ch);
        }
    }

    for (int j = 0; j < 15; j++) {
        for (int i = 0; i < 5; i++) {
            if (j >= g[i].size()) continue;
            cout << g[i][j];
        }
    }
}
profile
@Hanyang univ(seoul). CSE

0개의 댓글