관리 메뉴

솜씨좋은장씨

[BaekJoon] 2804번 : 크로스워드 만들기 (Python) 본문

Programming/코딩 1일 1문제

[BaekJoon] 2804번 : 크로스워드 만들기 (Python)

솜씨좋은장씨 2021. 9. 10. 17:12
728x90
반응형

코딩 1일 1문제! 오늘의 문제는 백준의 크로스워드 만들기 입니다.

백준의 크로스워드 만들기를 파이썬으로 풀이하였습니다.

 

2804번: 크로스워드 만들기

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

www.acmicpc.net

👨🏻‍💻 문제 풀이

먼저 split을 통해 입력받은 문자열에서 두 개의 단어를 만들어줍니다.

그 다음 각각의 길이 M, N을 구합니다.

string1, string2 = string.split()
    
N, M = len(string1), len(string2)

그 다음 겹치는 위치의 좌표로 사용할 변수를 두개 만들어 줍니다.

cross_row, cross_col = 0, 0

출력 결과를 보면 앞쪽 단어는 하나의 row에 들어가있고

뒤쪽 단어는 앞쪽 단어와 겹치는 부분에 세로로 들어가있는 것을 볼 수 있습니다.

뒤쪽 단어를 세로로 표현할 부분의 인덱스가 cross_col 앞쪽 단어를 가로로 표현할 부분의 인덱스가 cross_row 입니다.

for idx, char in enumerate(string1):
    if char in string2:
        cross_row = string2.index(char)
        cross_col = idx
        break

각각의 값은 위와 같이 구합니다.

먼저 앞쪽 단어(string1) 에서 enumerate를 활용하여 문자를 하나씩 꺼내옵니다.

꺼내오면서 해당 문자가 뒤쪽 단어(string2) 에 포함되어있을 경우 

뒤쪽 단어에서 해당 문자가 포함된 위치를 cross_row에 앞쪽 단어에 포함되어있는 위치를 cross_col에 넣어둡니다.

temp_string = ["." * N for _ in range(M)]

최종 출력을 위한 문자열 목록을 만들어 주고

for idx in range(len(temp_string)):
    if idx == cross_row:
        temp_string[idx] = string1
    else:
        temp_string[idx] = list(temp_string[idx])
        temp_string[idx][cross_col] = string2[idx]
        temp_string[idx] = "".join(temp_string[idx])

아까 구해둔 cross_row, corss_col 을 활용해 각각 값을 넣어준뒤

for temp in temp_string:
    print(temp)

출력해주면 끝! 입니다.

 

전체 코드는 아래를 참고해주세요.

👨🏻‍💻 코드 ( Solution )

def cross_word(string):
    string1, string2 = string.split()
    
    N, M = len(string1), len(string2)
    
    cross_row, cross_col = 0, 0
    
    for idx, char in enumerate(string1):
        if char in string2:
            cross_row = string2.index(char)
            cross_col = idx
            break
    
    temp_string = ["." * N for _ in range(M)] 
    
    for idx in range(len(temp_string)):
        if idx == cross_row:
            temp_string[idx] = string1
        else:
            temp_string[idx] = list(temp_string[idx])
            temp_string[idx][cross_col] = string2[idx]
            temp_string[idx] = "".join(temp_string[idx])
            
    for temp in temp_string:
        print(temp)
    
if __name__ == "__main__":
    string = input()
    cross_word(string)
 

GitHub - SOMJANG/CODINGTEST_PRACTICE: 1일 1문제 since 2020.02.07

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

Comments