본문 바로가기

Algorithm

백준 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개 문자가 있어야 한다. 문제 설명에 나온 것 같이 두 단어가 교차된 형태로 출력되어야 한다. 나머지 글자는 '.'로 출력한다.

 

짱구 조금만 굴리면 금방 푸는 문제. 문제만 복잡해 보일 뿐 구현은 별거 아님.

 

 

#include <iostream>
#include <string>

using namespace std;

string A,B;


int count,count2;
bool check = false;

int main(void)
{


cin >> A >> B;


for(int i=0; i<A.size(); i++)
{
for(int j=0; j<B.size(); j++)
{

if(A[i]==B[j])
{
count = j;
count2 = i;
check = true;
break;
}

}

if(check)
{
break;
}


}



for(int i=0; i<B.size(); i++)
{

if(i != count)
{
   for(int j=0; j<A.size(); j++)
   {
    if(j != count2)
    {
    cout<<".";
   }
   else{
   
    cout<<B[i];
   }
   
   
   }
}
else{

cout<<A;
}

cout<<endl;

}





}

반응형

'Algorithm' 카테고리의 다른 글

백준 11286번 절댓값 힙  (0) 2019.08.09
백준 11724번 연결 요소의 개수  (0) 2019.08.08
백준 2857번 FBI  (0) 2019.08.06
백준 4604번 Steganography  (0) 2019.08.05
백준 1427번 소트인사이드 atoi(str.c_str())  (0) 2019.08.05