본문 바로가기

알고리즘/백준 문제 풀이

[Python] 18155번 Issuing Plates

728x90

https://www.acmicpc.net/problem/18155

 

18155번: Issuing Plates

Your output will be M lines, one per plate, in the same order as the plates are given on the input. If the plate is valid, write out the string ‘VALID’; otherwise write out the string ‘INVALID’.

www.acmicpc.net


 

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