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

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

by RiverWon 2024. 8. 5.

쉬운 줄 알고 덤볐다가 생각보다 고전을 해서.. 생각 과정을 풀이하려 한다.

두 번째 예시가 의외의 복병이었다.

5줄로 입력받는데, 처음엔 줄마다 단어의 개수가 같은 줄 알고 단순히 15*15행렬을 만들어 @로 채워뒀다.

그런데 어라라 단어의 개수가 다르더라.

그래서 어떻게 해야 좋을 지 고민했다.

 

생각

1. 5줄로 입력받을 때, string 형식으로 받으면서 각 문자열의 길이를 배열에 저장해 두자.

2. string 길이 정보를 담은 배열에서 max length를 뽑아내자

3. 각 줄을 순회할 때, string이 max length보다 짧으면 나머지는 @로 채워넣자.

4. 세로로 출력을 할 때, @가 아닌 문자에 대해서만 출력하자.

 

#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>

using namespace std;

int main() {

  string str;
  int length[5];
  char arr[15][15];
  int max=0;
  
  for (int i=0; i<5; i++){
    cin >> str;
    length[i] = str.length();
    for(int j=0; j<str.length(); j++){
      arr[i][j] = str[j];
    }
  }

  for (int i=0; i<5; i++){if(length[i] > max) max=length[i];}

  for(int i=0; i<5; i++){
    for (int col=length[i]; col<max; col++){
      arr[i][col] = '@';
    }
  }
  for(int row=0; row<max; row++){
    for(int j=0; j<5; j++){
      if(arr[j][row]!='@'){
        cout << arr[j][row];
      }
    }
  }
  return 0;
}