티스토리 뷰

728x90
반응형

백준 온라인 저지(BOJ) 10798번 세로읽기
https://www.acmicpc.net/problem/10798

 

10798번: 세로읽기

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

www.acmicpc.net

* 사용언어 : C언어, C++

 

1. 문제

5개의 단어가 1줄 마다 주어지고, 각 단어는 1 ~ 15개의 문자로 빈 칸 없이 이루어짐
이 단어들을 세로로 읽을 때의 순서로 출력 (공백은 건너뜀)

 

2. 풀이

문자를 총 5(y) × 15(x) 칸 입력 받아야 하므로 char 배열로 선언해줍니다.
문자열의 경우 마지막 칸을 0('\0') 로 입력받으므로 x 를 16으로 선언했습니다.
 
문자열의 경우 scanf 의 %s 로 입력받으면 한 줄을 한 번에 입력 받을 수 있습니다.
따라서 y 를 0 부터 5번 반복하면서 %s 로 입력받았습니다.
 
출력 시 가로, 세로를 바꿔야하므로 일반적인 2차원 배열과 다르게
2중 for 문의 순서를 y → x 가 아닌 x → y 로 했습니다.
 
그리고 해당 칸이 공백인 경우 출력하지 않도록 if 문을 추가해주었습니다.

 

3. 코드

#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#endif
/*
10798_세로읽기
1112kb	0ms
*/
#include <cstdio>

char s[5][16];

int main() {
#ifdef _WIN32
	freopen("input.txt", "r", stdin);
#endif // _WIN32
	for (int y = 0; y < 5; ++y) scanf("%s", s[y]);

	for (int x = 0; x < 15; ++x) {
		for (int y = 0; y < 5; ++y) {
			if (s[y][x]) printf("%c", s[y][x]);
		}
	}

	return 0;
}

* 배열을 전역 변수로 선언하면 모든 값이 0 으로 초기화 됩니다. (char 로 0 은 '\0' null 문자입니다)

728x90
반응형
댓글