알고리즘 문제(SOL)

[백준/2804/파이썬] 크로스워드 만들기

https://www.acmicpc.net/problem/2804

 

2804번: 크로스워드 만들기

A의 길이를 N, B의 길이를 M이라고 했을 때, 출력은 총 M줄이고, 각 줄에는 N개 문자가 있어야 한다. 문제 설명에 나온 것 같이 두 단어가 교차된 형태로 출력되어야 한다. 나머지 글자는 '.'로 출력

www.acmicpc.net

Problem

  • 창영이는 크로스워드 퍼즐을 만들려고 한다.

조건

  • 두 단어 A와 B가 주어진다. A는 가로로 놓여야 하고, B는 세로로 놓여야 한다. 또, 두 단어는 서로 교차해야 한다. (정확히 한 글자를 공유해야 한다) 공유하는 글자는 A와 B에 동시에 포함되어 있는 글자여야 하고, 그런 글자가 여럿인 경우 A에서 제일 먼저 등장하는 글자를 선택한다.
  • 마찬가지로 이 글자가 B에서도 여러 번 등장하면 B에서 제일 처음 나오는 것을 선택한다. 예를 들어, A = "ABBA"이고, B = "CCBB"라면, 아래와 같이 만들 수 있다.

SOL

문자열 처리를 묻는 문제이다. 문자열을 다룰때는 언어마다 특성이 다르니까, 고려해서 구현을 해야한다.

파이썬 같은 경우, 문자열은 수정이 불가능한 객체로 인식이 된다.(immutable한 객체)

 

하지만, 이 문제는 row,col을 잘 정해서 크로스 워드에 어떻게 출력을 해줄지가 더 관건인 문제이다.

 

  • row = B에 있는 겹치는 글자의 index 
  • col = A에 있는 겹치는 글자의 index
  • 출력 부분에서, 비어있는 부분은 "."로 출력해주고, 기본적으로 한줄씩 출력하므로, "."*col +B[i]+"."*(len(A)-col-1)을 해주면 , 조건에 맞게 출력이 된다.
# word 1 = row
# word 2 = col
word1,word2=map(str,input().split())


for i in range(len(word1)):
    if word1[i] in word2:
        col = i
        row = word2.index(word1[i])
        break

for i in range(len(word2)):
    if i==row:
        print(word1)
    else:
        print("."*col+word2[i]+"."*(len(word1)-1-col))