문제출처 : https://www.acmicpc.net/problem/14788
code
#include <stdio.h> #include <string.h> int main() { int T, i, j, k, K, flag = 1, y = 0; scanf("%d", &T); for (i = 0; i < T; i++) { char S[11] = { 0 }; scanf("%s", &S); scanf("%d", &K); int len = strlen(S); for (j = 0; j < len - K + 1; j++) { if (S[j] == '-') { for (k = 0; k < K; k++) { if (S[j + k] == '-') S[j + k] = '+'; else if (S[j + k] == '+') S[j + k] = '-'; } y++; } } for (j = 0; j < len; j++) if (S[j] == '-') flag = 0; if (flag == 1) printf("Case #%d: %d", i+1, y); else printf("Case #%d: IMPOSSIBLE", i+1); y = 0, K = 0, len = 0; } return 0; }
백준에 제출하니까 100%까지되는데 틀렸다고 나온다.... 왜그렇게 나오는지는 모르겠다;;;
그냥 문자열입력받고, -만나면 +로 바꿔주는 작업하고 y도 ++해준다, 그렇게 문자열길이만큼 다돌았는데도, - 가 남아있으면 IMPOSSIBLE을 출력하고, 모두 +이면, 주어진 조건대로 출력해준다.
잘되는데 왜 틀렸다고 나올까........ ㅠㅠ
진짜 내가 돌대가리였다.. 하..... flag초기화를 i를 도는 for문에 포함을 시키지않았다....
C++로 다시 만들었고, 알고리즘은 동일하다.
#include <iostream>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
int T, i, j, k, K, y = 0;
cin >> T;
for (i = 1; i <= T; i++)
{
int flag = 1;
string S;
cin >> S >> K;
int len = S.length();
for (j = 0; j <= len - K; j++)
{
if (S[j] == '-')
{
for (k = 0; k < K; k++)
{
if (S[j + k] == '-')
S[j + k] = '+';
else
S[j + k] = '-';
}
y++;
}
}
for (j = 0; j < len; j++)
if (S[j] == '-')
flag = 0;
if (flag)
cout << "Case #" << i << ": " << y << '\n';
else
cout << "Case #" << i << ": IMPOSSIBLE" << '\n';
y = 0;
}
return 0;
}