본문 바로가기
알고리즘/문제

[백준] 10798. 세로읽기 <C++>

by 코드 이야기 2020. 4. 16.
728x90

www.acmicpc.net/problem/10798

 

10798번: 세로읽기

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

www.acmicpc.net

 

#include <iostream>
using namespace std;

char a[5][16];  //1)

int main(){
  for(int i=0; i<5; i++)  //2)
    cin>>a[i];
  
  for(int k=0; k<15; k++)  //3)
  {
    for(int i=0; i<5; i++)  //4)
    {
      if(a[i][k] != '\0')  //5)
        cout<<a[i][k];
    }
  }
}

1) 5개의 문자열을 위한 배열 선언

ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ  <-이걸 다섯줄 만들음.

 

 

2) 문자열 다섯개를 입력 받는다.

 

 

3) 문자의 최대 길이는 15이므로 14번 방까지 반복한다.

     - ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ

        1  2  3   4  5  6  7   8  9 10 11 12 13 14 15  (x)

        이 순서로 비교를 하는 것이 아니므로 이 반복문이 바깥쪽에 위치하는 것임.

1 6 11 ...            
2 7 12 ...            
3 8 13 ...            
4 9 14 ...            
5 10 15 ...            

위 표의 방향으로 비교를 해야한다. 

 

 

4) 문자열의 개수는 5개이므로 4번 방까지 반복.

 

 

5) 문자 배열의 방에는 기본적으로 '\0'이 들어있다. 그러므로 '\0'이 아니라면 내가 문자를 집어넣었다는 것이다.

    (그리고 배열을 전역변수로 선언하지 않을 시 이상한 문자가 들어가서 출력할 때 갑자기 내가 입력하지 않은 문자가 튀어나올 수 있다. 내가 그랬다. ㅠㅠ)

 

728x90

'알고리즘 > 문제' 카테고리의 다른 글

[백준] 4344. 평균은 넘겠지 <C++>  (0) 2020.04.17
[백준] 17608. 막대기 <C++>  (0) 2020.04.16
[백준] 1157. 단어 공부 <C++>  (0) 2020.04.15
[백준] 14563. 완전수 <C++>  (0) 2020.04.14
[백준] 10804. 카드 역배치 <C++>  (0) 2020.04.14

댓글