문제 출처 : https://www.acmicpc.net/problem/2804
2804번: 크로스워드 만들기
문제 창영이는 크로스워드 퍼즐을 만들려고 한다. 두 단어 A와 B가 주어진다. A는 가로로 놓여야 하고, B는 세로로 놓어야 한다. 또, 두 단어는 서로 교차해야 한다. (정확히 한 글자를 공유해야 한다) 공유하는 글자는 A와 B에 동시에 포함되어 있는 글자여야 하고, 그런 글자가 여럿인 경우 A에서 제일 먼저 등장하는 글자를 선택한다. 마찬가지로 이 글자가 B에서도 여러 번 등장하면 B에서 제일 처음 나오는 것을 선택한다. 예를 들어, A = "ABBA
www.acmicpc.net
풀이 과정
A와 B 양쪽에 포함되는 문자를 찾아야 합니다. 두 단어를 앞에서부터 조사하면서 겹치는 문자가 있는지 간단히 찾을 수 있습니다.
B에서 겹치는 문자의 인덱스는 A가 출력될 행의 위치이고, A에서 겹치는 문자의 인덱스는 B가 출력될 열의 위치가 됩니다. 예제를 통해 알아보겠습니다.
A = BANANA, B = PIDZAMA 라고 했을 때 'A'가 두 단어에 포함됩니다. A 문자열에서 'A'가 처음 시작되는 위치는 2 (BANANA) 이므로 B는 2열에 출력 되어야 합니다. B 문자열에서 'A'가 처음 시작되는 위치는 5 (PIDZAMA)이므로 A 문자열은 5 행에서 출력되어야 함을 의미합니다.
소스 코드
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
37
38
39
40
41
42
43
44
45
46
47
|
#include <iostream>
using namespace std;
int main()
{
string a, b;
cin >> a >> b;
int horizontal = a.length();
int vertical = b.length();
int a_loc, b_loc;
bool check = true;
for (int i = 0; i < horizontal && check; i++)
{
for (int j = 0; j < vertical; j++)
{
if (a[i] == b[j])
{
a_loc = j;
b_loc = i;
check = false;
break;
}
}
}
for (int i = 0; i < vertical; i++)
{
if (i == a_loc)
{
for (int j = 0; j < horizontal; j++)
{
cout << a[j];
}
}
else
{
for (int j = 0; j < horizontal; j++)
{
if(j== b_loc) cout << b[i];
else cout<<".";
}
}
cout << endl;
}
}
|
cs |
'백준온라인저지' 카테고리의 다른 글
2884번 알람 시계 (0) | 2019.11.07 |
---|---|
11286번 절댓값 힙 (0) | 2019.10.22 |
1238번 파티 (0) | 2019.07.18 |
3062번 수 뒤집기 (0) | 2019.07.18 |
2417번 정수 제곱근 (0) | 2019.07.12 |