새소식

⌨️ Algorithms/백준

[Python] 백준 19564번_반복

2023. 2. 14. 19:27

  • -

https://www.acmicpc.net/problem/19564

 

19564번: 반복

muse가 입력하고자 하는 글 $S$가 주어진다. 이 글은 알파벳 소문자만으로 이루어져 있으며, 길이는 $L$이다. ($1 \le L \le 10^5$)

www.acmicpc.net

 

  • muse는 키보드가 고장나서, 어떤 키를 누르든 abcdefghijklmnopqrstuvwxyz가 입력
  • 원하는 글을 쓰기 위해서는 아래와 같은 작업을 해야 함
    • 1) abcdefghijklmnopqrstuvwxyz를 K번 반복해서 입력
    • 2) 원하는 글자를 마우스로 지워, 최종 글을 완성
  • muse는 많은 글자를 지우는 일이 귀찮기 때문에, K를 최소화하려 함
  • muse가 원하는 글을 입력하려면 abcdefghijklmnopqrstuvwxyz를 몇 번 입력해야 하는지 구하기
  • 입력
    • muse가 입력하고자 하는 글 S가 주어짐
    • 이 글은 알파벳 소문자만으로 이루어져 있으며, 길이는 L (1≤L≤105)
  • 출력
    • K의 최솟값을 출력
  • 시간 제한: 1초
  • 메모리 제한: 256 MB

 

"""
입출력 예시)

polymath -> 6
"""

 

 

## 의사코드 ##

# k = 1 # 맨 처음 키보드를 눌러야 함

# for i in range(1, len(s)):
#     # 현재 문자가 이전 문자보다 작거나 같은 경우, k+1 
#       -> 같은 문자인 경우에도 +1 해야 함(두번 눌러야 하니까)
#     if s[i] <= s[i-1]: # 현재 문자가 이전 문자보다 사전에서 앞에 있으면
#         k += 1 
#     # 현재 문자가 이전 문자보다 큰 경우, 통과
#      -> 현재 문자가 이전 문자보다 사전에서 뒤에 있는 경우

 

  • ex) 'p o l y m a t h'
    • k=1) p y (+ p, y)
    • k=2) p o y (+ o)
    • k=3) p o l y (+ l)
    • k=4) p o l y m t (+ m, t)
    • k=5) p o l y m a t (+ a)
    • k=6) p o l y m a t h (+ h)
    • -> 현재 문자가 이전 문자보다 사전 순에서 뒤에 있으면 k 추가 x
      • => 현재 문자가 이전 문자보다 사전 순에서 앞에 있는 경우에만 k + 1

 

 

 

통과한 코드

s = input()
k = 1 # 맨 처음 키보드를 눌러야 함
for i in range(1, len(s)):
    # 현재 문자가 이전 문자보다 작거나 같은 경우, k+1 
    if s[i] <= s[i-1]: # 현재 문자가 이전 문자보다 사전에서 앞에 있으면
        k += 1
print(k)

-> 현재 문자가 이전 문자보다 사전에서 앞에 있는 경우에만 k+1

 

 

  • 문자열 사전순 비교
    • -> 아스키코드 값으로 대소비교 가능
print('o가 p보다 크다:', 'o' > 'p')
print('o는 p보다 작다:', 'o' < 'p')

"""
o가 p보다 크다: False
o는 p보다 작다: True
"""

 

 

 

 

 

참고)

 

https://ddolcat.tistory.com/684

 

[Python] 파이썬 아스키코드(ASCII) 비교 및 변환 총정리 : ord(), chr(), hex()

파이썬에서 아스키코드를 문자로 변환하는 방법과 문자를 아스키코드로 변환하는 방법에 대해 알아봅니다. ord()함수를 사용하여 아스키코드로 변환할 수 있습니다. 반대로 chr()함수를 사용하여

ddolcat.tistory.com

 

https://velog.io/@cosmos/boj%EB%B0%B1%EC%A4%80-19564-python

 

boj/백준-19564-python

muse는 키보드가 구리다키를 누를때마다 a~z까지 입력된다.입력하고자 하는 s가 주어졌을 때, 원하는 글자를 제외한 나머지 글자를 지우거나 a~z를 k번 반복해서 입력하여 s를 만들기위해 k를 최소

velog.io

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다!