728x90
문제
창영이는 크로스워드 퍼즐을 만들려고 한다.
두 단어 A와 B가 주어진다.
A는 가로로 놓여야 하고, B는 세로로 놓여야 한다. 또, 두 단어는 서로 교차해야 한다. (정확히 한 글자를 공유해야 한다)
공유하는 글자는 A와 B에 동시에 포함되어 있는 글자여야 하고, 그런 글자가 여럿인 경우 A에서 제일 먼저 등장하는 글자를 선택한다.
마찬가지로 이 글자가 B에서도 여러 번 등장하면 B에서 제일 처음 나오는 것을 선택한다.
예를 들어, A = "ABBA"이고, B = "CCBB"라면, 아래와 같이 만들 수 있다.
.C..
.C..
ABBA
.B..
https://www.acmicpc.net/problem/2804
입력
첫째 줄에 두 단어 A와 B가 주어진다.
두 단어는 30글자 이내이고, 공백으로 구분되어져 있다.
또, 대문자로만 이루어져 있고, 적어도 한 글자는 두 단어에 포함되어 있다.
출력
A의 길이를 N, B의 길이를 M이라고 했을 때, 출력은 총 M줄이고, 각 줄에는 N개 문자가 있어야 한다.
문제 설명에 나온 것 같이 두 단어가 교차된 형태로 출력되어야 한다. 나머지 글자는 '.'로 출력한다.
예제
# input
BANANA PIDZAMA
# output
.P....
.I....
.D....
.Z....
BANANA
.M....
.A....
# input
MAMA TATA
# output
.T..
MAMA
.T..
.A..
문제 풀이
import sys
input = sys.stdin.readline
# 입력 받기
A, B = input().split()
# 교차점 변수 선언
row, col = 0, 0
# A문자 중 B에 존재하는 첫번째 인덱스 찾기
for i in range(len(A)):
if A[i] in B:
col = i
row = B.index(A[i])
break
# 교차하는 부분 그리기
for a in range(len(B)):
if row == a:
print(A)
else:
for b in range(len(A)):
if col == b:
print(B[a], end='')
else:
print('.', end='')
print()
파이썬을 독학하시는 분들에게 도움이 되길 바라며,
혹 더 좋은 방법이 있거나 오류가 있다면 편하게 말씀 부탁드립니다.
728x90