250x250
반응형
Notice
Recent Posts
Recent Comments
Link
N
(SWEA c++)1240. [S/W 문제해결 응용] 1일차 - 단순 2진 암호코드 본문
728x90
반응형
문제 해석에 시간이 많이 들었던 문제다...
0 ~ 9까지 해당하는 배열이 있기 때문에 전역 변수로 0과 1로 이뤄진 7자리의 숫자를 index에 맞게 number 변수로 선언하였다.
string 형태로 배열을 입력 받는다.(input 변수에 저장)
배열을 입력받을 때 '0'으로만 이뤄진 배열은 저장하지 않고 버리도록 한다.
만약 input 변수에서 '1'이 발견된다면 rfind 함수를 이용하여 해당 인덱스를 찾는다.
rfind를 사용하는 이유는 0 ~ 9까지 해당하는 숫자의 배열의 끝자리가 모두 1로 끝나기 때문에,
거꾸로 탐색을 하여 ('1'이 나오는 위치 - 55)부터 56개의 숫자를 받아오면 7자리씩 끊어서 암호를 알 수 있기 때문이다.
odd와 even을 이용하여 값을 더해주고, 암호코드가 맞는지 확인한 후 출력하면 된다.
#include <iostream>
#include <string>
#include <vector>
using namespace std;
string number[10] = {"0001101", "0011001", "0010011", "0111101", "0100011", "0110001", "0101111", "0111011", "0110111", "0001011"};
int main (void)
{
int t;
cin >> t;
for(int i = 1; i <= t; i++)
{
int n, m, ans = 0, odd = 0, even = 0;
string input;
vector<string> s;
cin >> n >> m;
for(int j = 0; j < n; j++)
{
cin >> input;
if(input.find('1') == -1)
continue;
input = input.substr(input.rfind('1') - 55, 56);
s.push_back(input);
}
for(int j = 0; j < 8; j++)
{
for(int k = 0; k < 10; k++)
{
if(number[k] == s[0].substr(7 * j, 7))
{
if((j + 1) % 2 == 0)
even +=k;
else
odd += k;
ans += k;
break;
}
}
}
cout << "#" << i << " ";
if(((odd * 3) + even) % 10 != 0)
cout << 0 << endl;
else
cout << ans << endl;
}
return 0;
}
728x90
반응형
'SW Expert Academy' 카테고리의 다른 글
(SWEA c++)1289. 원재의 메모리 복구하기 (0) | 2020.10.15 |
---|---|
(SWEA c++)1244. [S/W 문제해결 응용] 2일차 - 최대 상금 (4) | 2020.10.14 |
(SWEA c++)1234. [S/W 문제해결 기본] 10일차 - 비밀번호 (0) | 2020.10.14 |
(SWEA c++)1230. [S/W 문제해결 기본] 8일차 - 암호문3 (0) | 2020.10.13 |
(SWEA c++)1229. [S/W 문제해결 기본] 8일차 - 암호문2 (0) | 2020.10.13 |