본문 바로가기
Problem Solving/백준

[백준] 17363번 : 우유가 넘어지면?

by shinbian11 2020. 7. 13.

https://www.acmicpc.net/problem/17363

 

17363번: 우유가 넘어지면?

첫 줄에 그림의 세로 길이와 가로 길이를 의미하는 정수 N과 M(1 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에 걸쳐 그림의 각 줄을 의미하는 M글자의 문자열이 하나씩 주어진다. 문자열은 공백을 포

www.acmicpc.net


<C++>

#include <bits/stdc++.h>
#define F_I ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
typedef long long ll;
using namespace std;

string s[104];
char a[104][104]; //맨 처음 문자들을 담을 2차원 배열
char b[104][104]; //a 배열을 옆으로 쓰러뜨렸을 때 다시 담길 2차원 배열
int n, m;

int main()
{
	F_I;

	
	cin >> n >> m;
	for (int i = 0; i < n; i++)//입력 받기
	{
		cin >> s[i];
		for (int j = 0; j < s[i].length(); j++)
		{
			a[i][j] = s[i][j];
		}
	}

	for (int i = 0; i < n; i++) //입력 받은 문자들을 다른 문자로 치환하기
	{
		for (int j = 0; j < m; j++)
		{
			if (a[i][j] == '-')
				a[i][j] = '|';
			else if (a[i][j] == '|')
				a[i][j] = '-';
			else if (a[i][j] == '/')
				a[i][j] = '\\';
			else if (a[i][j] == '\\')
				a[i][j] = '/';
			else if (a[i][j] == '^')
				a[i][j] = '<';
			else if (a[i][j] == '<')
				a[i][j] = 'v';
			else if (a[i][j] == 'v')
				a[i][j] = '>';
			else if (a[i][j] == '>')
				a[i][j] = '^';
		}
	}

	for (int i = 0; i < n; i++) // a 배열에서 치환이 모두 완료된 문자들을 b 배열에 옮겨담기
	{
		for (int j = 0; j < m; j++)
		{
			b[(m-1) - j][i] = a[i][j]; //예시로 2차원 배열을 아무거나 만들어서 규칙성을 찾아내었다.
		}
	}

	for (int i = 0; i < m; i++) // b 배열 출력하기
	{
		for (int j = 0; j < n; j++)
		{
			cout << b[i][j];
		}
		cout << endl;
	}
}

 

> 주의 1 : n과 m, 다시 말해서 세로 길이와 가로 길이의 범위를 잘 따져야 한다.

              i, j의 범위가 n까지인지, m까지인지를 잘 구별하기!

 

> 주의 2 : / 는 \(역 슬래쉬)로 치환해야 하는데, 이때 \이 출력되려면 \ 두개를 써야 한다. 

              이 부분은 다른 분이 설명해 놓으신 링크를 참고하기! https://1d1cblog.tistory.com/103