algorithm

[C++] 백준 알고리즘 2999번 (비밀 이메일)

Dev:P 2018. 10. 24. 22:49
반응형

문제

 

 

 


이번에 다뤄볼 문제는 2999번 문제 '비밀 이메일'입니다.

비밀 이메일 문제에서 연습해야 하는 key-point는 배열과 이중포문입니다.

 

문제에서 주어진대로 상근이가 받은 메시지가 들어갈 1차원 배열을 생성하는게 우선입니다.

그리고 정인이가 몇개의 문자를 보냈는지 판단하기 위해 while을 돌며 '\0'을 만날때까지 count값을 증가시킵니다.

 

이제 count값으로 이중포문을 돌며 적당한 R과 C의값을 구해야합니다.

포문에서 사용되는 i*j의 값이 count와 같다면 분기 안으로 들어갑니다.

여기서 i는 R값이 될 예정이고 j는 C값이 될 예정입니다. 

문제에서 주어진 조건은 R<=C이므로 i가 j보다 크다면 그냥 넘어가고 그 경우가 아니라면 변수 r과 c에 각각 i, j 값을 할당합니다.

 

자 이제 다시한번 이중포문을돌며 2차원 배열에 차곡차곡 상근이가 받은 메세지를 넣어줍니다.

그리고 마지막으로 해당 2차원 배열을 출력해주면 해결되는 문제입니다.

 

아래 해답코드를 보면 쉽게 이해하실 수 있을겁니다. 


코드(C++)

#include<iostream>
using namespace std;
 
int main() {
 
    char arr[101];
    char arr2[101][101];
    int r,c;
    int count = 0;
    int k = 0;
 
    cin.getline(arr, 101);
 
 
    while (arr[count] != '\0') count++;
 
 
    for (int i = 1; i <= count; i++) {
        for (int j = 1; j <= count; j++) {
            if (i*j == count) {
                if (i > j);
                else {
                    r = i;
                    c = j;
                }
            }
        }
    }
 
    for (int i = 0; i < c; i++) {
        for (int j = 0; j < r; j++) {
            arr2[j][i] = arr[k];
            k++;
        }
    }
 
    for (int i = 0; i < r; i++) {
        for (int j = 0; j < c; j++) {
            cout<<arr2[i][j];
        }
    }
 
    return 0;
}

 

반응형