728x90
[SW Expert Academy] 1225번: 7일차 - 암호생성기 -C++
[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 |
---|