https://www.acmicpc.net/problem/2999
아직 이차원 배열의 indexing 이 익숙하지 않아서
인덱싱 순서를 생각하는데 가장 오래걸렸다.
예시는 n*n 짜리 이차원 배열을 이용하는데
n*m짜리 배열을 돌려보니 문자가 이상하게 나왔다.
그래서 어디가 틀렸는지 디버거 이용해서 하나하나 본다고 좀 오래걸렸다.
#include <iostream>
#include <math.h>
using namespace std;
int main() {
string str;
cin >> str;
int num = str.length();
int i, j, k, row = 0, col = 0;
for (i = sqrt(num); i > 0; i--) { // 배열의 크기를 알기 위해
if (num % i == 0) {
col = i; //복호화하는 코드이기때문에 문제에서 주어진 암호 알고리즘과
row = num / col; //row와 col을 반대로 정의한다.
break;
}
}
char** arr = new char* [row]; //row*col 짜리 이차원 배열을 동적할당한다.
for (i = 0; i < row; i++) {
arr[i] = new char[col];
}
i = 0;
while(i<num){ //문자열을 차례로 배열에 집어넣는다.
for (j = 0; j < row; j++) {
for (k = 0; k < col; k++) {
arr[j][k] = str[i++];
}
}
}
for (i = 0; i < col; i++) { //암호를 만들때와 마찬가지로 col은 고정하고
//row를 먼저 바꿔가면서 출력한다.
for (j = 0; j < row; j++) {
cout << arr[j][i];
}
}
}
반복문이 너무 많아서 암호가 길어지면 시간이 너무 많이걸릴것 같긴한데
구글링해서 다른 분들 코드도 읽어봐야겠다.
그래도 오랜만에 혼자힘으로 풀어낸 문제라서 맞추고 나니까 속이 후련했다!
'알고리즘' 카테고리의 다른 글
[boj 1753/c++] 최단경로 (0) | 2023.04.27 |
---|---|
[boj 9465/c++] 스티커(동적계획법, dp) (0) | 2022.08.07 |
[boj 1012, 2606, 7576/C++] 유기농 배추, 바이러스, 토마토(bfs와 dfs) (0) | 2022.07.17 |
[BOJ 11866, 1158, 11025/C++] 요세푸스 문제 시리즈 (0) | 2022.07.10 |
[boj4641/c++]백준 4641번: Doubles (0) | 2021.01.04 |