c++ cin을 이용해서 공백없이 쭉 이어서 주어진 행렬형태 입력받기.

10026번 문제를 보면 예제 입력이 R B G 로 이루어진 대문자 언어들이 공백문자 없이 쭉 붙어서 그대로 행렬 형태를 이루면서 제시해준다.

 그 전에는 이렇게 공백문자 없이 쭉 붙어서 제시해주는 입력에 관한 코드 예제에서 쭉 붙어있을때 string을 이용해서 받은뒤에, 각각의 행에 스트링의 각각의 원소로 인덱스로 접근하는 형식을 보았기 때문에, 이렇게 공백문자 없이 입력받으면 꼭 그런식으로 해야하는건가 싶어서 이번 문제도 그렇게 생각했는데, 

이번 문제의 풀이를 보니까 그냥 cin을 활용해서 원래 공백 문자가 있듯이 char board로 바로 2중 for문을 활용해서 받아도 그대로 원하는대로 받아지는 코드를 보게 되었다. 

 

#include <bits/stdc++.h>
using namespace std;
#define X first
#define Y second

char board[101][101];
bool vis[101][101];
int n;
int dx[4] = { 1,0,-1,0 };
int dy[4] = { 0,1,0,-1 };

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin >> n;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			cin >> board[i][j];
		}
	}

	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			cout << board[i][j] << " ";
		}
		cout << "\n";
	}
	
}

예를들어 딱 이정도까지만 작성하고 입력에 대해서 어떤식으로 결과가 나는지 확인해보면, 

 

이런식으로 그냥 그대로 쭉 붙어서 입력받아도 cin>>board[i][j]를 통해서 원하는 형태로 2중 배열로 받아지고 그걸 출력해보면 정상적으로 딱 원하는 값으로 나뉘어져서 원소별로 들어갔는걸 볼 수 있다. 

아무래도 이런식으로도 가능하고 그 전에 본 것은 쭉 붙어있을때 string 하나로 받아서 처리할 수 있기 때문에 그런식으로 코드를 줄여서 활용한것으로 보여진다. 

이렇게 받을수도 있다는걸 생각하도록 하자. 

 

  Comments,     Trackbacks