어흥

[해커랭크] Encryption (C++) 본문

알고리즘/HackerRank

[해커랭크] Encryption (C++)

라이언납시오 2020. 11. 23. 17:18
728x90
반응형

문제링크: www.hackerrank.com/challenges/encryption/problem

 

Encryption | HackerRank

Encrypt a string by arranging the characters of a string into a matrix and printing the resulting matrix column wise.

www.hackerrank.com

1. 주의할 점

- 미리 9*9배열 Arr[][]을 만들어놓는다(최대 길이가 81이므로)

- 배열의 가로와 세로를 잘 구하도록 한다

 

2. 구현

- 입력받은 문자의 공백을 모두 제거한 문자열을 Str에 저장한다

- Math.h의 내장함수인 Ceil과 Floor 함수를 통해 Row, Col을 구한다(단, Row*Col < Str의 길이일 경우, Row++한다)

- Str의 길이만큼 Arr[][] 배열에 값을 저장한다

- 배열을 위에서 아래로 읽은 값을 Result 문자열에 저장한 이후, 오른쪽으로 넘어가기전에 줄띄움을 추가해준다

char arr[9][9];
// Complete the encryption function below.
string encryption(string s) {
    string str = "", result = "";
    int len = s.size();
    for (int i = 0; i < len; i++) {
        char c = s[i];
        if ('a' <= c && c <= 'z') str += c;
    }
    len = str.size();
    int row, col;
    row = floor(sqrt(len));
    col = ceil(sqrt(len));
    if (row*col < len) row++;

    int cnt = 0;
    for (int i = 0; i < row; i++)
        for (int j = 0; j < col; j++)
            arr[i][j] = 'A';
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col; j++) {
            arr[i][j] = str[cnt++];
            if (cnt == len) break;
        }
        if (cnt == len) break;
    }
    for (int i = 0; i < col; i++) {
        for (int j = 0; j < row; j++) {
            if (arr[j][i] == 'A') break;
            else result += arr[j][i];
        }
        result += " ";
    }
    return result;
}
728x90
반응형
Comments