본문 바로가기
PS 문제 풀이/Jungol

[Jungol] 정올 2601 종이접기

by 까망 하르방 2021. 7. 21.
반응형

출처http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=1862&sca=50  

Approach

주어지는 접는 횟수 n에 대해서 출력되는 모양 규칙을 파악해야 한다.

(n = 1) ∨

(n = 2) ∧∨∨

(n = 3) ∧∧∨∨∧∨∨

(n = 4) ∧∧∨∧∧∨∨∨∧∧∨∨∧∨∨

 

현재 문자열의 길이 = len 일 때,

n이 증가할 때 다음 문자열의 길이는 {2 × len + 1} 이다.

 

이때, 기존 문자열에서 중간 '∨'이 삽입되고

중간을 기준으로 뒤쪽에 있는 글자가 뒤집혀서 앞쪽에 배치되는 형태 입니다.

* 설명을 위해서 문자 변경

                            v

                        ^vv

                ^^vv^vv

^^v^^vvv^^vv^vv

n이 증가할 때, 기존 문자열 구성과 길이를 이용해서

앞에 붙여지는 문자열을 누적해서 구성할 수 있다.

문제 조건상에서 (n ≤ 20) 이기 때문에 문자열의 최대 길이는 1,048,575 이다.


#include <stdio.h>
char str[1048575 + 5];

int main()
{
    // freopen("input.txt", "r", stdin);
    int n;
    scanf("%d", &n);
    str[0] = 'v';
    int len = 1;
    for (int i = 2; i <= n; ++i)
    {
        str[len] = 'v';
        
        int end = len; // before
        len = 2 * len + 1;
        int start = len; // after
        int tg = 0;
        for (int j = start - 1; j > end; j--)
        {
            if (str[tg] == '^')
                str[j] = 'v';
            else
                str[j] = '^';
            tg++;
        }
    }
    for (int i = len - 1; i >= 0; i--)
    {
        if (str[i] == '^')
            printf("∧");
        else
            printf("∨");
    }
    printf("\n");
}
반응형

'PS 문제 풀이 > Jungol' 카테고리의 다른 글

[Jungol] 정올 2586 자동분무기(중)  (0) 2021.05.16
[Jungol] 정올 2223 블랙홀  (0) 2021.04.03
[Jungol] 정올 1863 종교  (0) 2021.04.02
[Jungol] 정올 1516 단어세기  (0) 2021.03.18
[Jungol] 정올 1264 마법색종이  (0) 2021.03.18

댓글