문제풀이/문자열
[Python/파이썬] 백준 19948번 음유시인 영재
딜레이레이
2024. 3. 14. 08:49
19948번: 음유시인 영재
감수성이 뛰어난 음유시인 영재는 일상생활 중에 번뜩 시상이 떠오르곤 한다. 하지만 기억력이 좋지 못한 영재는 시상이 떠오르면 그 순간 컴퓨터로 기록해야만 안 까먹는다! 시는 대문자, 소
www.acmicpc.net
코드
input_str = input()
spaces = int(input())
alphabets = list(map(int, input().split()))
prev = '-'
title = ""
for i in range(len(input_str)):
if input_str[i] == prev: # 앞글자와 같은 경우
continue
else: # 앞글자와 같지 않은 경우
if input_str[i] == ' ': # 공백
spaces -= 1
else: # 알파벳
if prev == ' ' or prev == '-': # 단어의 시작
title += input_str[i].upper()
alphabets[ord(input_str[i].lower())-97] -= 1
alphabets[ord(input_str[i].lower())-97] -= 1
prev = input_str[i]
possible = True
for i in range(26):
if alphabets[i] < 0:
possible = False
break
print(title if (possible and spaces >= 0) else -1)
문자열을 한 글자씩 살펴보며 사용되는 문자를 alphabets 배열에서 1씩 차감한다.
- alphabets 배열의 인덱스는 0~25이 각각 a~z에 해당한다. 대소문자를 구분하지 않기 때문에 각 글자를 소문자로 변환한 값의 아스키코드값에서 97을 뺀 값을 인덱스 값으로 쓰면 된다.
- 같은 문자가 연속으로 나온다면 자판을 꾹 눌러서 계속 입력할 수 있으므로 아무 연산도 하지 않고 넘어간다. 그렇지 않다면 현재 문자가 공백일때, 공백이 아닌 알파벳일때로 나누어서 연산한다. 알파벳일 때는 현재 위치가 단어의 시작인지 확인해주어야 한다.