728x90
시간 제한 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
'ALGORITHM > 정렬, 탐색,구현' 카테고리의 다른 글
[코드트리] 파이썬 - 루돌프의 반란 (0) | 2024.04.07 |
---|---|
[백준 1138번] 파이썬 - 한 줄로 서기 (0) | 2024.03.19 |
[백준 14891번] 파이썬 - 톱니바퀴 (0) | 2024.03.05 |
[백준 11256번] 파이썬 - 사탕 (0) | 2024.03.04 |
[백준 15970번] 파이썬 - 화살표 그리기 (0) | 2024.02.03 |