음~ 회문 (뭔지알지)
음 ~ 짝수로? 오케~~
회문을 다 찾으라고?? mod로 나누라고???
헉 어렵군 몰겠서 패스
한 문제였다.
이것도 어렵게 생각했던 거였는데 간단히 정리하면 반만 생각하면 된다.
반이 1부터 100000까지 숫자이고 이걸 대칭으로 붙이면 되니
1 ~ 100000 반복문 -> 숫자를 문자열로 바꿈 -> 문자열을 뒤집어서 붙임 -> 다시 숫자로 바꿔서 sum으로 합친다
끝~~
정말 간단한 문제였다....
k까지 회문을 구해서 더하면 되는 문제...
이걸 내가 어디서 겁먹었나 생각해보면 (ㅋㅋ 지금 생각하면 좀 웃기다)
뭔가 회문 구하는 게 귀납법을 써야할 것 같다! (내가 잘 못쓰는 기법으로 풀 것 같음)
더하는데 mod로 나눈다고? 더할 때 오버플로우 나지 않을까? - 그래서 mod로 나누는 거였다
마지막으로 규칙을 찾으려 했었음ㅋㅋㅋ 더하고 mod 할 때 규칙이 있지 않을까..
아무튼 정말 쉬운 문제여서 좀 허망함..
#include <iostream>
#include <queue>
#include <string>
using namespace std;
using i64 = long long;
int main() {
i64 k, p;
cin >> k >> p;
i64 sum = 0;
for(int i = 1; i <= k; i++)
{
string s = to_string(i);
string tmp = "";
for (int j = s.size() - 1; j >= 0; j--)
{
tmp += s[j];
}
s += tmp;
sum += (stoll(s) % p);
sum %= p;
}
cout << sum << endl;
return (0);
}
코드도 쏘 이지.. 간단..
거꾸로 붙이는 걸 어떻게 할지 몰라서 저렇게 했는데 북님 코드 보니 reverse를 쓰면 되겠다 싶다.
#include <iostream>
#include <queue>
#include <string>
#include <algorithm>
using namespace std;
using i64 = long long;
int main() {
i64 k, p;
cin >> k >> p;
i64 sum = 0;
for(int i = 1; i <= k; i++)
{
string s = to_string(i);
string tmp = s;
reverse(tmp.begin(), tmp.end());
s += tmp;
sum += (stoll(s) % p);
sum %= p;
}
cout << sum << endl;
return (0);
}
예아~~
'코드포스' 카테고리의 다른 글
[코드포스 Practice15] D. Queue (0) | 2020.03.21 |
---|---|
[코드포스 Practice15] C. Odd sum (0) | 2020.03.21 |
[코드포스 Practice15] A. Alphabetic Removals (0) | 2020.03.20 |
[코드포스 Practice15] 후기 (0) | 2020.03.20 |
[코드포스 Practice14] E. Balanced Ternary String (0) | 2020.03.14 |