본문 바로가기

algorithm/SW Expert Academy

[SWEA] 1225번: 7일차 - 암호생성기 -C++

728x90

[SW Expert Academy] 1225번: 7일차 - 암호생성기 -C++

SW Expert Academy

 

SW Expert Academy

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

swexpertacademy.com

[D3] 난이도인데 생각보다 간단한 문제였다. [D3]가 생각보다 어렵지 않은가..?

 

문제에 설명은 queue를 써야할 것처럼 설명이 되어있다.

맨 앞에서 하나를 빼서 1을 감소 후 뒤에 넣고.. 다시 맨 앞에서 하나를 빼서 2를 감소 후 뒤에 넣고... 

 

하지만 절대 queue를 써서 그런 비효율적인 짓을 하지 않아도 된다. 나 같은 경우에는 vector를 사용해서 풀었다.

 


 

vector에서 하나씩 인덱싱만 해서 값을 줄이는 것도 충분하다. 그러다가 0보다 작거나 같아지는 경우가 발생하면, 순서에 맞춰서 출력만 해주면 되는 것이다.

 

문제에서 주의하라고 알려준 부분만 주의해주면 된다.

  • 테스트케이스는 10개
  • 8개의 숫자에 대해 암호문 생성
  • 숫자가 감소하다가 0 이하로 떨어지면 0으로 유지되고 종료

 

이외의 것들은 아래의 코드를 보면 이해가 쉽게 될 것이다.

 

사실 너무 쉽게 풀려서 '엥 이게 통과야?' 했다.. 시간 초과든 뭐든 나지 않을까 하며 일단 내봤는데..ㅎ..

 

#include <iostream>
#include <vector>

void solve(void);

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

	solve();
}

std::vector<int> encrypt(std::vector<int>& plain)
{
	int idx = 0;
	int subtraction = 1;

	while (0 < plain[idx] - subtraction)
	{
		plain[idx] -= subtraction;
		idx = (idx + 1) % 8;
		subtraction = ((subtraction + 1) % 5) ? ((subtraction + 1) % 5) : 5;
	}
	plain[idx] = 0;

	std::vector<int> encryption(8);
	for (int i = 1; i <= 8; i++)
		encryption[i - 1] = plain[(idx + i) % 8];

	return encryption;
}

void solve(void)
{
	for (int t = 1; t <= 10; t++)
	{
		int test_case;
		std::cin >> test_case;

		std::vector<int> vec(8);
		for (int i = 0; i < 8; i++)
			std::cin >> vec[i];

		std::vector<int> answer = encrypt(vec);

		std::cout << "#" << test_case;
		for (auto& a : answer)
			std::cout << " " << a;
		std::cout << '\n';
	}
}

 

잘못된 점이나 부족한 점 지적해주시면 감사하겠습니다

728x90

'algorithm > SW Expert Academy' 카테고리의 다른 글

[SWEA] 4615번: 재미있는 오셀로 게임 -C++  (0) 2021.01.26