관리 메뉴

풀이 보관함

[C++] SWEA 1225번: 암호생성기 본문

problem solving/SWEA

[C++] SWEA 1225번: 암호생성기

viin 2022. 12. 10. 00:21

🔗 문제

[S/W 문제해결 기본] 7일차 - 암호생성기

SW Expert Academy

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

🖍 풀이

입력받은 배열에서 숫자 위치를 바꾸는 짓은 하기 싫었다.

다른 사람은 어떻게 푸는지 모르겠지만, 나는 원형큐 구현을 하며 깨달은 식을 응용했다.

 

1. 가장 첫번째 위치를 가르킬 변수 start를 하나 선언해준다.

2. start에 있는 번호를 감소시켰으면 start를 증가시킨다.

3. 증가시킬 때 start가 총 길이 N을 벗어나지 않도록 (start+1%N)해준다.

 

💾  소스

#include <iostream>
const int SIZE = 8;

int main()
{
    int tc = 1;
    while(tc!=10)
    {
        int start = 0, cnt = 0;
        int arr[SIZE+1] = {0, };
        std::cin >> tc;
        for(int i=0; i<SIZE; ++i)
            std::cin >> arr[i];
        
        while(true)
        {
            arr[start]-=(++cnt);
            cnt = (cnt > 4 ? 0 : cnt);
            if(arr[start] <=0)
            {
                arr[start] = 0;
                break;
            }
            start = (start+1)%SIZE;
        }
        
        std::cout << '#' << tc << ' ';
        for(int i=0; i<SIZE; ++i)
            std::cout << arr[(i+start+1)%SIZE] << ' ';
        std::cout << '\\n';
    }
    return 0;
}