[알고리즘] 문제풀이 연습

백준 10219 - meats on the grill : reverse함수 등

ddgoori 2019. 7. 4. 16:03

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

 

10219번: Meats On The Grill

각 테스트 케이스마다 각 고기덩이를 뒤집은 후의 불판의 상태를 H줄에 걸쳐서 출력한다. 각 줄에는 W개의 문자가 있어야 하며, 입력에서 주어진 각 고기 덩이가 뒤집힌 채로 있어야 한다. 이를 만족하는 어느 답을 출력해도 정답으로 인정한다.

www.acmicpc.net

문제

 

abbb

aabb

aa.. 

 

이런식으로 고기 모양이 주어지는데, 같은 영어 소문자는 고기 한덩이다.

이 고기들을 90도/180도/270도/반전 하여 겹치지 않게 주어진 그리드 안에서(h*w) 고기를 뒤집는 것

=> 고기 한덩이가 붙어 있도록 회전 or 반전 시키면 됨

 

reverse()

#include <algorithm>

int a[5] = {1,2,3,4,5}
reverse(a, a+4);

// 결과값

4,3,2,1,5로 배열 전체가 뒤집어져있음

 

string의 배열 개념

#include <string>

string array[3];

array[0] = "abbb";
array[1] = "aabb";
array[2] = "aa..";

//배열 각각이 string으로 되어 있다는 뜻
//결과값
abbb
aabb
aa..

string array

0

1

2

abbb

aabb

aa..

이런식으로 string이 배열의 1칸에 담겨있다는 말!

 

array[0].begin()

=> array 배열의 0번째에 담긴 string 'abbb' 의 첫번째 문자를 가리키는 반복자 iterator 포인터 반환

 

// Baekjook 10219

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

string gogi[11];

void flip(int x, int y) {

	for (int j = 0; j < y; j++) {
    	//각 배열칸에 담긴 문자열 뒤집고 출력
		reverse(gogi[j].begin(), gogi[j].end());
		cout << gogi[j] << endl;
	}

}

int main() {

	int testcase;
	cin >> testcase;

	while (testcase) {

		int h, w;
		cin >> h >> w;
		for (int i = 0; i < h; i++) {
			cin >> gogi[i];
		}

		//모양그대로 뒤집기만 하면 됨
		flip(w,h);
		testcase--;
	}

}