프론트엔드 개발자 중규리 입니다 ദി ᷇ᵕ ᷆ ) 자세히보기

PS/문제풀이

백준 3005 크로스워드 퍼즐 쳐다보기 Python

중규리 2024. 2. 5. 13:17

🐸 문제 정보

 

3005번: 크로스워드 퍼즐 쳐다보기

첫째 줄에 R과 C (2 ≤ R, C ≤ 20)가 주어진다. R는 행의 개수, C는 열의 개수이다. 그 다음 R개의 줄엔 C개의 문자가 포함되어 있다. 각 문자는 영어 알파벳 소문자 또는 '#'이며, '#'인 경우에는 막혀

www.acmicpc.net

 

🤖 알고리즘

구현

 

⏱️ 풀이 시간

21.34

 

📝 풀이

처음에 문제 이해도 안되고, BFS로 풀어야하나 하고 조금 고민하느라 시간이 오래 걸렸다.

그냥 십자말풀이라고 적어놓지... 왜 크로스워드 퍼즐이라고 적어놨을까....

여튼 풀이 방법 자체는 간단했다.

  1. 행과 열을 문자열로 각각 분리
  2. 각 행과 열에 대해서 #으로 split
  3. 길이가 1 이상이라면 substring 조건에 충족하므로, res 배열에 담기
  4. res를 사전순으로 정렬 후 가장 앞에있는 문자열이 정답

 

🧑‍💻 나의 답

# pypy3

import sys
input = sys.stdin.readline

r, c = list(map(int, input().rstrip().split()))
puzzle = [list(input().rstrip()) for _ in range(r)]
res = []

for row in puzzle:
    res.extend([word for word in ''.join(row).split('#') if len(word) > 1])

for col in list(zip(*puzzle)):
    res.extend([word for word in ''.join(col).split('#') if len(word) > 1])

print(sorted(res)[0])