728x90
https://www.acmicpc.net/problem/18155
22/09/16
실버 5 밀기에 도전해보고자 하여 순서대로 밀던 중 만난 문제이다. 간단한 문자열 문제로, 쉽게 풀 수 있었다.
문제 접근 방식:
문제는 굉장히 간단한데, N개의 문자열 세트와 판별해야 할 M개의 문자열 쿼리가 있을 때, 각 쿼리마다 문자열 세트 안에 있는 문자열이 포함되어있는지를 판별하는 문제이다.
이때 각 쿼리는 숫자가 섞여 있을 수도 있는데, 이때 0=O 1=L 2=Z 3=E 5=S 6=B 7=T 8=B이라는 치환 표를 이용하여 전부 영문자로 바꿔주어서 판별한다.
치환 표가 주어져 있었기 때문에 나는 replace를 여러번 사용하는 것보다는 maketrans함수와 translate를 이용하여 치환하는 것이 더 빠르다고 생각했다.
maketrans와 translate메서드를 사용한지 오래되어서 조금 신선했던 문제였다.
아래는 내가 위의 접근 방식과 같이 작성한 파이썬 코드이다. 더보기를 누르면 확인할 수 있다.
더보기
# 18155번 Issuing Plates
# 구현, 문자열
N, M = map(int, input().split())
bad_words = [input() for _ in range(N)]
table = str.maketrans('01235678', 'OLZESBTB')
for _ in range(M):
word = input().translate(table)
for bad_word in bad_words:
if bad_word in word:
print('INVALID')
break
else:
print('VALID')
'알고리즘 > 백준 문제 풀이' 카테고리의 다른 글
[Python] 1380번 귀걸이 (0) | 2022.09.29 |
---|---|
[Python] 1340번 연도 진행바 (0) | 2022.09.29 |
[Python] 1308번 D-Day (0) | 2022.09.29 |
[Python] 2057번 팩토리얼 분해 (0) | 2022.09.29 |
[Python] 4948번 베르트랑 공준 (0) | 2022.09.29 |