습관처럼
백준 3023 - 마술사 이민혁 본문
https://www.acmicpc.net/problem/3023
문제 설명
카드 뒷 면 전체를 디자인하지 않고, 왼쪽 위 1/4만 디자인한다. 그 다음 대칭시켜 오른쪽 위를 만들고, 다시 대칭시켜서 아래 부분을 모두 만든다.
접근 방법
대칭하는 방법을 알고 있다면 쉽게 해결가능할 것입니다.
또한, algorithm의 reverse를 이용하면 대칭 구현하기가 더 쉽습니다.
2020/04/21 - [Language/C++] - C++ - n x n 2차원 배열에 대한 조작 (90도 회전 / 점대칭 / 선대칭)
코드
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int r,c;
int main(void) {
cin>>r>>c;
string str[2*r];
for(int i=0;i<r;i++) cin>>str[i];
for(int i=0;i<r;i++){
for(int j=c-1;j>=0;j--){
str[i]+=str[i][j];
}
}
for(int i=0;i<r;i++){
str[2*r-1-i]=str[i];
}
int y,x;
cin>>y>>x;
if(str[y-1][x-1]=='#') str[y-1][x-1]='.';
else str[y-1][x-1]='#';
for(int i=0;i<2*r;i++) cout<<str[i]<<"\n";
return 0;
}
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main(void)
{
int r, c, a, b;
string parts[50];
string card[100];
cin >> r >> c;
for (int i = 0; i < r; i++)
cin >> parts[i];
cin >> a >> b;
for (int i = 0; i < r; i++)
{
string tmp = parts[i];
reverse(tmp.begin(), tmp.end());
card[i] = parts[i] + tmp;
}
for (int i = 0; i < r; i++)
card[r * 2 - 1 - i] = card[i];
if (card[a - 1][b - 1] == '#')
card[a - 1][b - 1] = '.';
else
card[a - 1][b - 1] = '#';
for (int i = 0; i < r * 2; i++)
cout << card[i] << '\n';
}
funny algorithm *0*~
'Algorithms > BOJ' 카테고리의 다른 글
백준 15683 - 감시 (0) | 2020.05.01 |
---|---|
백준 14891 - 톱니바퀴 (0) | 2020.04.30 |
백준 14890 - 경사로 (0) | 2020.04.13 |
백준 3085 - 사탕 게임 (0) | 2020.04.13 |
백준 2468 - 안전 영역 (0) | 2020.04.10 |