# 문제
칠판에 붙여진 단어들이 주어질 때, 영석이가 세로로 읽은 순서대로 글자들을 출력하는 프로그램을 작성하시오.


# 풀이
풀이 단계에 명시된 대로 2차원 배열을 사용해 풀면 어렵지 않은 문제다.
해당 글에서는 2차원 배열을 사용한 풀이와 1차원 배열을 사용한 풀이 두 가지를 적어두었다.
문제에서 제시한 대로도 풀어보고 생각나는 대로도 풀어보며 다양한 풀이를 익혀보자.
🖱️ 풀이1 | 2차원 배열 사용
#include <iostream> using namespace std; int main(){ ios_base::sync_with_stdio(false); // 두 표준 입출력 동기화 해제 string matrix[5][15]; for(int i=0; i<5; i++){ string s; cin >> s; for(int j=0; j<15; j++){ if(j < s.length()) matrix[i][j] = s[j]; else matrix[i][j] = " "; } } for(int i=0; i<15; i++){ for(int j=0; j<5; j++){ if(matrix[j][i] != " ") cout << matrix[j][i]; } } return 0; }
2차원 배열 풀이는 입력을 배열에 넣어주고 문제에서 원하는대로 출력하는 두 단계로 구성했다.
string matrix[5][15]; for(int i=0; i<5; i++){ string s; cin >> s; for(int j=0; j<15; j++){ if(j < s.length()) matrix[i][j] = s[j]; else matrix[i][j] = " "; } }
총 다섯줄의 입력이 주어지고, 각 줄에는 최대 15개의 글자들이 주어지므로 배열의 크기를 5, 15로 설정해주었다.
그 후 입력을 가져와 한 글자씩 배열에 채워주고, 남은 공간은 공백을 넣어주면 출력 준비는 끝이다.
for(int i=0; i<15; i++){ for(int j=0; j<5; j++){ if(matrix[j][i] != " ") cout << matrix[j][i]; } }
출력 시에는 이중 for문 인덱스의 범위를 아까와 반대로 해주면 문제에서 원하는대로 답을 얻을 수 있다.
공백이 아닌 경우에만 해당 순서로 출력하면 되므로 if문으로 검사해준 후 출력하면 끝!
🖱️ 풀이2 | 1차원 배열 사용
#include <iostream> using namespace std; int main(){ ios_base::sync_with_stdio(false); // 두 표준 입출력 동기화 해제 string matrix[5]; for(int i=0; i<5; i++){ cin >> matrix[i]; } for(int i=0; i<15; i++){ for(int j=0; j<5; j++){ if(i < matrix[j].size()) cout << matrix[j][i]; } } return 0; }
이번엔 굳이 2차원 배열을 사용할 필요가 있나...? 싶은 생각이 들어서 해본 1차원 배열을 사용한 풀이다.
string matrix[5]; for(int i=0; i<5; i++){ cin >> matrix[i]; }
우선 크기 5의 1차원 배열을 선언해주고 입력을 한 줄씩 받아왔다.
for(int i=0; i<15; i++){ for(int j=0; j<5; j++){ if(i < matrix[j].size()) cout << matrix[j][i]; } }
출력 시에는 아까와 동일한 범위로 for문을 실행하면 되는데, 풀이 1에서 했던 공백 검사 대신 i의 인덱스를 입력의 사이즈까지만 주면 된다.
예를 들어,
첫 줄의 입력이 AABCDD라면 matrix[0][0]~matrix[0][5]
두번째 줄의 입력이 afzz라면 matrix[1][0]~matrix[1][3]
이런 식으로 출력하겠다는 소리다.
if문으로 i가 해당 범위까지만 출력될 수 있도록 하면 끝!
▶ 풀이 1 | 2차원 배열 사용

▶ 풀이 2 | 1차원 배열 사용

10798번: 세로읽기
총 다섯줄의 입력이 주어진다. 각 줄에는 최소 1개, 최대 15개의 글자들이 빈칸 없이 연속으로 주어진다. 주어지는 글자는 영어 대문자 ‘A’부터 ‘Z’, 영어 소문자 ‘a’부터 ‘z’, 숫자 ‘0’
www.acmicpc.net
'백준 > C++' 카테고리의 다른 글
[백준] 2745번: 진법 변환 | C++ 풀이 (0) | 2023.05.29 |
---|---|
[백준] 2563번: 색종이 | C++ 풀이 (2) | 2023.05.28 |
[백준] 25206번: 너의 평점은 | C++ 풀이 (0) | 2023.05.26 |
[백준] 1316번: 그룹 단어 체커 | C++ 풀이 (0) | 2023.05.25 |
[백준] 2941번: 크로아티아 알파벳 | C++ 풀이 (0) | 2023.05.24 |