알고리즘/백준

0220. [BOJ#2804] 크로스워드 만들기

Jinoo.keem 2024. 2. 21. 00:49
728x90

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

 

2804번: 크로스워드 만들기

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

www.acmicpc.net

1 초 128 MB 5798 3045 2756 54.273%

문제

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

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


제출 코드

A, B = input().split()
N = len(A)
M = len(B)

same = []
for k in A:
    if k in B:
        same = k
        break

cntA = -1
for j in A:
    cntA += 1
    if same == j:
        break

cntB = -1
for l in B:
    cntB += 1
    if same == l:
        break

arr = [['.'] * N for _ in range(M)]

for z in range(M):
    arr[z][cntA] = B[z]
for x in range(N):
    arr[cntB][x] = A[x]

for line in arr:
    print(*line, sep='')

처음 같은 단어를 고르는 부분에서 for문을 두번 도는 방식으로 구했는데 오류가 나서 간략화 하였고, 

A문자열과 B문자열에서 같은 단어가 나오는 순서를 구하여

'.' 으로 이루어진 arr 배열의 가로 세로에 교차되게 배치해 주었다.

구현이 쭉쭉 되는 날까지 화이팅

'알고리즘 > 백준' 카테고리의 다른 글

0226. [BOJ#15650] N과 M (2)  (1) 2024.02.28
0221. [BOJ#2309] 일곱난쟁이  (0) 2024.02.25
0219. [BOJ#18258] 큐 2  (0) 2024.02.21
0218. [BOJ#2178] 미로 탐색  (0) 2024.02.18
0217. [BOJ#1966] 프린터 큐  (2) 2024.02.18