728x90

백준 19948 - 음유시인 영재

시간 제한 1초, 메모리 제한 512MB

# 조건

  • 감수성이 뛰어난 음유시인 영재는 일상생활 중에 번뜩 시상이 떠오르곤 한다.
  • 하지만 기억력이 좋지 못한 영재는 시상이 떠오르면 그 순간 컴퓨터로 기록해야만 안 까먹는다!
  • 시는 대문자, 소문자 알파벳과 빈칸으로 이루어져 있다.
  • 시상은 매번 훌륭하지만 제목 짓는 센스가 부족한 영재는 시에 나오는 단어들의 첫 글자를 대문자로 바꾼 뒤 순서대로 이어서 제목으로 만든다.
    • 만약 시의 내용이 'There is no cow level' 이라면 시의 제목은 'TINCL'이 된다.
  • 시도 때도 없이 시를 기록하느라 낡아버린 영재의 키보드는 수명이 얼마 남지 않았다.
  • 앞으로 스페이스 바와 영자판을 누를 수 있는 횟수가 정해져 있어 이를 초과하면 키보드가 수명이 다 하여 어떠한 작업도 하지 못하게 된다.
  • 하나 다행인 점은, 키보드를 쓸 때 같은 문자가 연속으로 나오거나 빈칸이 연속으로 나오는 경우 영재는 자판을 꾹 눌러 한 번만 사용해서 키보드를 좀 더 효율적으로 쓸 수 있다. (A와 a는 다른 문자이므로 'Aa'는 2번의 a자판을 누른 것으로 한다.)
  • 시의 내용과 시의 제목은 Enter 키로 구분된다.
    • 다행히 Shift 키와 Enter 키는 항상 수명이 무한한 상황이다!
  • 음유시인 영재가 이번에 지은 시의 내용과 스페이스 바와 영자판을 누를 수 있는 횟수가 주어졌을 때, 시의 내용과 제목을 모두 기록할 수 있다면 시의 제목을 출력하고, 만약 키보드의 수명이 다 하여 기록을 완벽하게 못 하게 된다면 -1을 출력하여라.

입력

  • 첫 줄에 시의 내용이 주어진다.
  • 둘째 줄에는 스페이스 바의 남은 사용 가능 횟수 주어진다.
  • 셋째 줄에는 대소문자를 구별하지 않고, 26개의 알파벳에 대한 영자판의 남은 사용 횟수가 주어진다.

출력

  • 시의 내용과 제목을 모두 기록할 수 있다면 시의 제목을 출력하여라.

# 접근 방법

  • 브루트포스와 아스키 코드를 사용하여 풀어준다.
  • 입력받는 문자열을 공백을 기준으로 나눠준 뒤에 길이가 스페이스바의 남은 사용 횟수보다 길다면 -1을 출력해준다.
  • 시오 제목을 순회하며 딕셔너리에 횟수를 저장하고, 1씩 빼주면서 가능한지 확인한단.
  • 또한, 다음꺼와 같다면 조사하지 않는다.
import sys
input = sys.stdin.readline

poem = input().rstrip()
title = ''.join([a[0].upper() for a in poem.split()])
poem += title + '.'
left_space = int(input())
left_push_alphabet = {idx: cnt for idx, cnt in enumerate(map(int, input().split()))}
for i in range(len(poem) - 1):
    if poem[i] == poem[i + 1]:
        continue
    if poem[i] == ' ':
        if left_space:
            left_space -= 1
        else:
            print(-1)
            exit()
    else:
        if left_push_alphabet[ord(poem[i].lower()) - 97]:
            left_push_alphabet[ord(poem[i].lower()) - 97] -= 1
        else:
            print(-1)
            exit()
else:
    print(title)
728x90