반응형
https://www.acmicpc.net/problem/11093
구현 문제였습니다.
📕 풀이방법
📔 입력 및 초기화
문제에 나와 있는 입력을 적절히 해준 후 초기화를 해줍니다. 100까지의 제곱수를 squares라는 배열에 저장합니다.
또한 message table인 board배열을 초기화해줍니다.
📔 제곱수 찾기
입력받은 문자열의 길이 이상의 가장 가까운 제곱수를 찾습니다. 이 수가 정사각형 message table의 하나의 변입니다.
문자들을 적절히 삽입한 뒤 시계방향으로 90도 회전합니다.
📔 답 출력
'*'를 제외한 나머지를 출력합니다.
📕 Code
#include <bits/stdc++.h>
using namespace std;
int t, side;
char board[101][101];
vector <int> squares;
void rotateClockwise(){
char tmp[101][101];
for(int i = 0; i < side; i++){
for(int j = 0; j < side; j++){
tmp[i][j] = board[side-j-1][i];
}
}
for(int i = 0; i < side; i++){
for(int j = 0; j < side; j++){
board[i][j] = tmp[i][j];
}
}
}
int main(){
for(int i = 1; i <= 100; i++) squares.push_back(i*i);
cin >> t;
while(t--){
memset(board,'*',sizeof(board));
string s;
cin >> s;
for(auto sq : squares){
if(sq >= s.size()) {side = sqrt(sq); break;}
}
int piv = 0;
for(int i = 0; i < side; i++){
for(int j = 0; j < side; j++){
if(piv < s.size())
board[i][j] = s[piv++];
else
board[i][j] = '*';
}
}
rotateClockwise();
for(int i = 0; i < side; i++){
for(int j = 0; j < side; j++){
if(board[i][j] !='*')
cout << board[i][j];
}
}
cout << '\n';
}
}
'Algorithm > Implementation' 카테고리의 다른 글
(Rust) - 백준(BOJ) 2557번 : Hello World (0) | 2021.08.07 |
---|---|
(C++) - 백준(BOJ) 13224번 : Chop Cup (0) | 2021.08.06 |
(C++) - 백준(BOJ) 10551번 : STROJOPIS (0) | 2021.08.03 |
(C++) - 백준(BOJ) 9947번 : Coin tossing (0) | 2021.08.03 |
(C++) - 백준(BOJ) 20165번 : 인내의 도미노 장인 호석 (0) | 2021.07.29 |