문제 주소: https://www.acmicpc.net/problem/19948
난이도: silver 3
pre = poem[0] #pre에 첫글자를 넣어준다.
if keyboard[ord(pre.upper()) - 65] - 1 < 0:
#이부분이 나름 키포인트라고 느껴지는데.
#대문자 A의 유니코드가 65이다, 그리고 주어진 입력에서 A를 누를수 있는 횟수는 인덱스 0번이다.
#따라서 pre를 대문자화 시켜주고 -> 유니코드로 바꿔주고 -65를 함으로써 -> 입력받은 리스트와 매칭시킬수 있다.
return print(-1)
else:
keyboard[ord(pre.upper()) - 65] -= 1
for letter in poem[1:]: #1번 인덱스부터는
if pre == letter: #이전 알파벳(or 스페이스바)이 연속되면 넘어가고
continue
elif letter == ' ': # 연속되지 않는 경우 공백을 만날때
space -= 1
if space < 0:
return print(-1)
else:
pre = letter
else: #연속되지 않는 경우 알파벳을 때
if keyboard[ord(letter.upper()) - 65] - 1 < 0:
return print(-1)
else:
pre = letter
keyboard[ord(letter.upper()) - 65] -= 1
위의 과정을 내용에 대해 한번 수행하고, 미리 만들어놓은 제목에 대해 한번 수행하면된다. 참고로 제목엔 공백이 없다.
poem = input()
space = int(input())
keyboard = list(map(int,input().split()))
def check_validity(poem, space):
ans = ("".join(word[0].upper() for word in poem.split()))
pre = poem[0]
if keyboard[ord(pre.upper()) - 65] - 1 < 0:
return print(-1)
else:
keyboard[ord(pre.upper()) - 65] -= 1
for letter in poem[1:]:
if pre == letter:
continue
elif letter == ' ':
space -= 1
if space < 0:
return print(-1)
else:
pre = letter
else:
if keyboard[ord(letter.upper()) - 65] - 1 < 0:
return print(-1)
else:
pre = letter
keyboard[ord(letter.upper()) - 65] -= 1
pre = ans[0]
if keyboard[ord(pre.upper()) - 65] - 1 < 0:
return print(-1)
else:
keyboard[ord(pre.upper()) - 65] -= 1
for letter in ans[1:]:
if pre == letter:
continue
elif letter == ' ':
space -= 1
if space < 0:
return print(-1)
else:
pre = letter
else:
if keyboard[ord(letter.upper()) - 65] - 1 < 0:
return print(-1)
else:
pre = letter
keyboard[ord(letter.upper()) - 65] -= 1
return print(ans)
check_validity(poem, space)