[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. 생각

  1. 두 단어 A와 B를 입력받고 두 단어의 공통된 철자를 중심으로 A는 가로, B는 세로로 쓰는 문제입니다.

  2. 먼저 공통되는 철자가 어디에 있는지 먼저 찾습니다. 단어 A와 B의 공통되는 철자의 인덱스를 각각 저장해야합니다.

  3. 그리고 A는 B의 인덱스 위치에 쓰여져야 하고, B는 A의 인덱스 위치에 쓰여져야합니다. 따라서 cross_index_B에는 A가 쓰이고, cross_index_A에는 B[i]를 쓰고 나머지에는 ‘.’을 씁니다

3. 소스코드 (C++)


터미널의 입출력 화면 예제1

2804_1

터미널의 입출력 화면 다른 예제

2804_2

터미널의 입출력 화면 다른 예제

2804_3 2804_4