문제
https://www.acmicpc.net/problem/17176
문제해설
0은 띄어쓰기 1~26은 A~Z, 27~52는 a~z까지 일대일대응되는 암호가 있다.
순서가 섞인 숫자들과 문장이 주어진다. 이 숫자들이 문장과 일치하는지 판단하는 문제이다.
문제풀이
숫자가 몇번 나왔는지 체크해주는 배열과
문장의 알파벳이 몇번 나왔는지 체크해주는 배열을 만들어 두 배열이 일치하는지 확인해주면 된다.
띄어쓰기를 포함한 한줄 전체를 받는 것은 getline(cin, 받을변수이름)
을 사용했다.
그리고 string이나 char를 입력받을 때는 엔터가 들어가지 않도록 조심해야한다.
전체코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include<iostream>
#include<string>
using namespace std;
int arr[53];
int ans[53];
string a;
int main() {
sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int n;
cin >> n;
for (int i = 0; i < n; i++) {
int x;
cin >> x;
arr[x]++;
}
getchar();
getline(cin, a);
for (int i = 0; i < n; i++) {
if (a[i] >= 'A' && a[i] <= 'Z')
ans[a[i] - 'A' + 1]++;
else if (a[i] >= 'a' && a[i] <= 'z')
ans[a[i] - 'a' + 27]++;
else if (a[i] == ' ')
ans[0]++;
}
bool flag = true;
for (int i = 0; i < 53; i++) {
if (arr[i] != ans[i])
flag = false;
}
if (flag == false)
cout << 'n';
else
cout << 'y';
}