본문 바로가기

BAEKJOON/구현

백준 3035번 [스캐너](C++) -yes6686- 티스토리

728x90
SMALL

백준 문제 풀이: 3035 (스캐너)


문제 링크: https://www.acmicpc.net/problem/3035

문제 설명:

주어진 문자 격자(행렬)를 가로와 세로로 확대합니다. 가로는 zc배, 세로는 zr배 만큼 늘려 출력합니다. 격자의 원래 크기는 r × c입니다.


문제 해결 코드


#include <iostream>
#include <string>
using namespace std;

char arr[51][51];   // 원본 문자 격자
string str[51];     // 확장된 문자열을 저장할 배열

int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);

    int r, c, zr, zc; // 행, 열, 세로 배율, 가로 배율
    cin >> r >> c >> zr >> zc;

    // 원본 격자 입력
    for (int i = 0; i < r; i++) {
        string s;
        cin >> s;
        for (int j = 0; j < s.size(); j++) {
            arr[i][j] = s[j];
        }
    }

    // 가로로 zc배 확대
    for (int i = 0; i < r; i++) {
        for (int j = 0; j < c; j++) {
            for (int t = 0; t < zc; t++) {
                str[i] += arr[i][j]; // 문자 j를 zc번 반복
            }
        }
    }

    // 세로로 zr배 확대하여 출력
    for (int i = 0; i < r; i++) {
        for (int j = 0; j < zr; j++) {
            cout << str[i] << '\n'; // 확장된 가로 문자열 출력
        }
    }

    return 0;
}

코드 설명

코드의 주요 로직과 사용된 알고리즘 설명:

  • 입력 처리: - 격자의 원본 문자를 입력받아 arr에 저장합니다.
  • 가로 확장: - 각 문자 arr[i][j]를 **zc번 반복**하여 문자열을 확장합니다. - 확장된 문자열은 str[i]에 저장됩니다.
  • 세로 확장: - 확장된 가로 문자열을 **zr번 반복**하여 출력합니다.

세부 구현:

  • 가로 확장은 각 문자에 대해 반복하여 문자열을 만든 후, 저장합니다.
  • 세로 확장은 이미 확장된 문자열을 zr번 출력하는 방식으로 해결합니다.

시간 복잡도 분석

  • 입력 크기가 r × c일 때, - 가로 확장 O(r × c × zc) - 세로 확장 O(r × zr)
  • 최종 시간 복잡도는 O(r × c × zc + r × zr)입니다.

결과

격자를 가로와 세로로 각각 배율에 맞게 확장한 결과를 출력합니다.

  • 입력 예시:
    2 2 2 3  
    AB  
    CD
  • 출력 예시:
    AAABBB  
    AAABBB  
    CCCDDD  
    CCCDDD

다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!

728x90
LIST