공부하자

[BOJ/Python] 2804. 크로스워드 만들기 본문

Algorithm/BOJ

[BOJ/Python] 2804. 크로스워드 만들기

dev_riley 2021. 9. 14. 23:28

문제

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

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

<입력>

첫째 줄에 두 단어 A와 B가 주어진다. 두 단어는 30글자 이내이고, 공백으로 구분되어져 있다. 또, 대문자로만 이루어져 있고, 적어도 한 글자는 두 단어에 포함되어 있다.

 

BANANA PIDZAMA

 

<출력>

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

 

.P....

.I....

.D....

.Z....

BANANA

.M....

.A....

 

<나의 코드>

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

for i in range(N):
    if A[i] in B:
        idx = i
        w = B.index(A[i])
        break

for j in range(M):
    if j == w:
        print(A)
    else:
        print('.' * idx + B[j] + '.' * (N-idx-1))

 

<REVIEW>

처음에 이 문제는 for문을 2번 돌리다가 도저히 중첩 for문을 빠져나오는 방법을 몰라 다시 생각해낸 방법이다. 이 문제는 index값이 중요하다고 생각한다. 특히 for문을 두 번 돌릴 때,  두 단어가 첫번째로 겹쳐지는 index값을 받지못하고 항상 마지막에 겹쳐지는 idx값을 받아와 for문이 2번 중첩될 때 어떻게 첫번째 겹쳐지는 글자의 index값을 받아오는 지 아직도 알수는 없지만,  if - in -: 을 쓰면 내가 원하는 첫번째 index값을 받아올 수 있다는 것을 새롭게 알게되었다. 

출력을 할 때도, 겹쳐지는 글자의 idx값을 알게되니깐, 훨씬 구현하기 쉬웠다. 

 

<출처>

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

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ/Python] 10818. 최소, 최대  (0) 2021.10.25
[BOJ/Python] 2562. 최댓값  (0) 2021.10.25
[BOJ/Python] 8979. 올림픽  (0) 2021.09.14
[BOJ/Python]1159. 농구 경기  (0) 2021.09.14
[BOJ/Python]2847. 게임을 만든 동준이  (0) 2021.09.10
Comments