일단 숫자의 왼쪽 상단이 전부 #이므로 이 위치가 . 이면 쭉쭉쭉 패스하다가 #을 만나면 숫자를 확인한다
확인하는 조건은 아래와 같은데.. 음.. 틀렸음
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <functional>
#include <string>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <cmath>
#include <cstring>
#include <bitset>
#define xx first
#define yy second
#define all(x) (x).begin(), (x).end()
using namespace std;
using i64 = long long int;
using ii = pair<int, int>;
using ii64 = pair<i64, i64>;
bool v[5][20000];
int main()
{
int n; string str;
cin >> n >> str;
n /= 5;
for (int i = 0, k = 0; i < 5; i++)
{
for (int j = 0; j < n; j++, k++)
{
if (str[k] == '#')
v[i][j] = true;
else
v[i][j] = false;
}
}
string ans = "";
for (int i = 0; i < n; i++)
{
if (!v[0][i])
continue;
if (v[0][i])
{
if (v[0][i] && v[1][i] && v[2][i] && v[3][i] && v[4][i])
{
if (!v[0][i + 1] && !v[1][i + 1] && !v[2][i + 1] && !v[3][i + 1] && !v[4][i + 1])
{
ans += "1";
i -= 2;
}
else if (v[0][i + 2] && v[1][i + 2] && v[2][i + 2] && v[3][i + 2] && v[4][i + 2])
{
if (v[2][i + 1])
ans += "8";
else
ans += "0";
}
else
ans += "6";
}
else if (v[0][i] && v[1][i] && v[2][i] && !v[3][i] && v[4][i])
{
if (v[1][i + 2])
ans += "9";
else
ans += "5";
}
else if (v[0][i] && !v[1][i] && v[2][i] && v[3][i] && v[4][i])
ans += "2";
else if (v[0][i] && !v[1][i] && v[2][i] && !v[3][i] && v[4][i])
ans += "3";
else if (v[0][i] && v[1][i] && v[2][i] && !v[3][i] && !v[4][i])
ans += "4";
else
ans += "7";
i += 2;
}
}
cout << ans << endl;
return 0;
}
지금 잠이 와서 그런지 어디가 틀린지 모르겠다
0 1 2 3 4 5 6 7 8 9 전부 숫자 나오는거 확인했는데 어디가 문제지
예상 1) 조건 어디가 틀렸음
예상2) 왼쪽 상단 하나만 확인하냐? 한 줄 전부 공백인지 확인해라
이 두개 중 하나 같은데.. 이거 다시 보고 숫자 다시 확인해야지
잠와죽겠음 자야지
엥???? 예???? 예상 2가 맞았음
일어나서 예상1 확인했는데 예상1은 문제가 없었고 예상2를 고치니 맞았다..
설마 이거겠어 싶었는데 이게 문제라고????????
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <functional>
#include <string>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <cmath>
#include <cstring>
#include <bitset>
#define xx first
#define yy second
#define all(x) (x).begin(), (x).end()
using namespace std;
using i64 = long long int;
using ii = pair<int, int>;
using ii64 = pair<i64, i64>;
bool v[5][20005];
int main()
{
int n; string str;
cin >> n >> str;
n /= 5;
for (int i = 0, k = 0; i < 5; i++)
{
for (int j = 0; j < n; j++, k++)
{
if (str[k] == '#')
v[i][j] = true;
else
v[i][j] = false;
}
}
string ans = "";
for (int i = 0; i < n; i++)
{
if (!v[0][i] && !v[1][i] && !v[2][i] && !v[3][i] && !v[4][i])
continue;
if (v[0][i])
{
if (v[0][i] && v[1][i] && v[2][i] && v[3][i] && v[4][i])
{
if (!v[0][i + 1] && !v[1][i + 1] && !v[2][i + 1] && !v[3][i + 1] && !v[4][i + 1])
{
ans += "1";
i -= 2;
}
else if (v[0][i + 2] && v[1][i + 2] && v[2][i + 2] && v[3][i + 2] && v[4][i + 2])
{
if (v[2][i + 1])
ans += "8";
else
ans += "0";
}
else
ans += "6";
}
else if (v[0][i] && v[1][i] && v[2][i] && !v[3][i] && v[4][i])
{
if (v[1][i + 2])
ans += "9";
else
ans += "5";
}
else if (v[0][i] && !v[1][i] && v[2][i] && v[3][i] && v[4][i])
ans += "2";
else if (v[0][i] && !v[1][i] && v[2][i] && !v[3][i] && v[4][i])
ans += "3";
else if (v[0][i] && v[1][i] && v[2][i] && !v[3][i] && !v[4][i])
ans += "4";
else
ans += "7";
i += 2;
}
}
cout << ans << endl;
return 0;
}
왜지???? 내 생각에는 숫자는 항상 저 왼쪽 위칸이 차있으니깐 이 칸이 비었다면 공백이고 차있다면 그 때 숫자 시작이라서 숫자 확인하게 했는데 왜지???
아니 왜지????
정답은~~ 다른 부분도 수정했기 때문이죠~~~
생각해보니 어제 밤에 찜찜하다고 전역변수 딱 맞게 만든거 5 키워났었다..
아마 배열이 [i+2] 접근할 때 배열 크기 넘어가서 잘못된 값에 접근했던 것 같다
(왜 예외 안 알려줘 ㅠㅠ)
항상 5 더하다가 딱 맞춰 했더니 이런 문제가 발생하는구나
'백준' 카테고리의 다른 글
14699 관악산 등산 (0) | 2020.09.24 |
---|---|
2961 도영이가 만든 맛있는 음식 (0) | 2020.09.24 |
12847 꿀 아르바이트 (0) | 2020.09.23 |
2217 로프 (0) | 2020.09.23 |
10814 나이순 정렬 (0) | 2020.09.21 |