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을 뺀 값을 인덱스 값으로 쓰면 된다.
- 같은 문자가 연속으로 나온다면 자판을 꾹 눌러서 계속 입력할 수 있으므로 아무 연산도 하지 않고 넘어간다. 그렇지 않다면 현재 문자가 공백일때, 공백이 아닌 알파벳일때로 나누어서 연산한다. 알파벳일 때는 현재 위치가 단어의 시작인지 확인해주어야 한다.
'문제풀이 > 문자열' 카테고리의 다른 글
[Python/파이썬] 백준 5052번 전화번호 목록 (0) | 2024.03.25 |
---|---|
[Python/파이썬] 백준 3613번 Java vs C++ (0) | 2024.03.16 |
[Python/파이썬] 백준 1251번 단어 나누기 (0) | 2024.03.08 |
[Python/파이썬] 백준 11656번 접미사 배열 (0) | 2024.01.19 |
[Python/파이썬] 백준 1283번 단축키 지정 (1) | 2023.12.21 |