CodingTest/Baekjoon

[baekjoon] 백준 1706번(파이썬): 크로스워드

JunJangE 2022. 3. 27. 09:53

문제

 

1706번: 크로스워드

동혁이는 크로스워드 퍼즐을 좋아한다. R×C 크기의 크로스워드 퍼즐을 생각해 보자. 이 퍼즐은 R×C 크기의 표로 이루어지는데, 퍼즐을 다 풀면 금지된 칸을 제외하고는 각 칸에 알파벳이 하나씩

www.acmicpc.net

알고리즘

- 반복문을 통해 가로와 세로로 연속되는 단어를 찾는다.

- 찾는 방법의 알고리즘은 다음과 같다.

- 반복문을 통해 가로, 세로의 문자를 확인한다.

- 현재 문자가 '#'가 아니면 문자를 낱말에 더해준다.

- 현재 문자가 # 이면서 낱말의 길이가 2 이상이라면 낱말 모음에 추가한다.

- 현재 문자가 # 이면서 낱말의 길이가 2 미만이라면 필요 없는 낱말이므로 ""로 낱말을 초기화한다.

- 가로, 세로 모든 낱말 모음을 구했으면 사전식 순으로 정렬 후 첫 번째 낱말을 출력한다.

코드

import sys

r, c = map(int, sys.stdin.readline().split())
graph = [list(map(str, sys.stdin.readline().strip())) for _ in range(r)]
word = []

# 반복문을 통해 가로로 연속되는 단어를 찾는다.
for i in range(r):
    width_word = ""
    for j in range(c):
        # 현재 문자가 # 아니면 문자를 낱말에 더해준다.
        if graph[i][j] != "#":
            width_word += graph[i][j]

        # 현재 문자가 # 이면서 낱말의 길이가 2이상이면 낱말모음에 추가한다.
        elif len(width_word) >= 2:
            word.append(width_word)

        # 현재 문자가 # 이면서 낱말의 길이가 2 미만이라면 필요없는? 낱말이므로 "" 초기화화
        else:
           width_word = ""

    if len(width_word) >= 2:
        word.append(width_word)

# 반복문을 통해 세로로 연속되는 단어를 찾는다.
for i in range(c):
    length_word = ""
    for j in range(r):
        if graph[j][i] != "#":
            length_word += graph[j][i]
        elif len(length_word) >= 2:
            word.append(length_word)
        else:
            length_word = ""

    if len(length_word) >= 2:
        word.append(length_word)

# 사전식 순으로 정렬 후 첫 번째 낱말을 출력
word.sort()
print(word[0])

github

 

GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법

내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.

github.com