[BOJ][C++] 백준 2804번 크로스워드 만들기
Updated:
2804번 크로스워드 만들기
1. 문제 정보
백준 온라인 저지 [2804번 크로스워드 만들기] 문제의 링크입니다.
문제
창영이는 크로스워드 퍼즐을 만들려고 한다.
두 단어 A와 B가 주어진다. A는 가로로 놓여야 하고, B는 세로로 놓여야 한다. 또, 두 단어는 서로 교차해야 한다. (정확히 한 글자를 공유해야 한다) 공유하는 글자는 A와 B에 동시에 포함되어 있는 글자여야 하고, 그런 글자가 여럿인 경우 A에서 제일 먼저 등장하는 글자를 선택한다. 마찬가지로 이 글자가 B에서도 여러 번 등장하면 B에서 제일 처음 나오는 것을 선택한다. 예를 들어, A = “ABBA”이고, B = “CCBB”라면, 아래와 같이 만들 수 있다.
.C..
.C..
ABBA
.B..
입력
첫째 줄에 두 단어 A와 B가 주어진다. 두 단어는 30글자 이내이고, 공백으로 구분되어져 있다. 또, 대문자로만 이루어져 있고, 적어도 한 글자는 두 단어에 포함되어 있다.
출력
A의 길이를 N, B의 길이를 M이라고 했을 때, 출력은 총 M줄이고, 각 줄에는 N개 문자가 있어야 한다. 문제 설명에 나온 것 같이 두 단어가 교차된 형태로 출력되어야 한다. 나머지 글자는 ‘.’로 출력한다.
예제 입력1
BANANA PIDZAMA
예제 출력1
.P....
.I....
.D....
.Z....
BANANA
.M....
.A....
시간 / 메모리 제한
1초 / 128MB
2. 생각
-
두 단어 A와 B를 입력받고 두 단어의 공통된 철자를 중심으로 A는 가로, B는 세로로 쓰는 문제입니다.
-
먼저 공통되는 철자가 어디에 있는지 먼저 찾습니다. 단어 A와 B의 공통되는 철자의 인덱스를 각각 저장해야합니다.
-
그리고 A는 B의 인덱스 위치에 쓰여져야 하고, B는 A의 인덱스 위치에 쓰여져야합니다. 따라서 cross_index_B에는 A가 쓰이고, cross_index_A에는 B[i]를 쓰고 나머지에는 ‘.’을 씁니다
3. 소스코드 (C++)