# 문제
칠판에 붙여진 단어들이 주어질 때, 영석이가 세로로 읽은 순서대로 글자들을 출력하는 프로그램을 작성하시오.
# 풀이
풀이 단계에 명시된 대로 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차원 배열 사용
'백준 > 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 |