알고리즘/BOJ

[BOJ 17487, Python 3] 타자 연습

70825 2021. 9. 1. 18:55
반응형

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

 

17487번: 타자 연습

건덕이가 입력할 문장 S가 주어진다. S는 영어 대소문자와 공백으로 이루어져 있으며, 공백 포함 최대 100글자이다. 공백은 연속해서 나타나지 않으며, 문장의 시작과 끝은 공백이 아니다.

www.acmicpc.net

 

 

풀이

l, r 변수를 잡아서 영어만 사용하는 경우는 모두 더해주고, shift와 space bar 사용횟수는 한 변수에 전부 저장해줍니다. 저는 이걸 etc라는 변수에 저장했습니다.

이렇게 했으면 이제 etc 변수를 적절히 나눠서 l과 r에 더해주면 됩니다. 여기서 경우의 수가 있는데요.

 

1) abs(l - r) >= etc일 경우

이런 경우에는 l이나 r중 작은 값에 etc을 전부 더해주면 됩니다.

 

2) abs(l - r) < etc인 경우

숫자가 남는 경우입니다.

먼저 l = r이 될 정도로 작은 값에 etc 값 일부를 더해주고, 남은 etc 값은 2로 나눠서 l과 r에 더해주면 됩니다. 만약 남은 etc가 홀수라면 나머지 1은 l이나 r 아무곳에나 더해주면 됩니다.

 

 

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
= 'qwertyasdfgzxcvb'
= 'uiophjklnm'
 
= [*input()]
l, r, etc = 000
for x in s:
    if x == ' ': etc += 1
    elif x.islower():
        if x in a: l += 1
        else: r += 1
    else:
        etc += 1
        if x.lower() in a: l += 1
        else: r += 1
= abs(l-r)
if p >= etc:
    if l < r: l += etc
    else: r += etc
else:
    etc -= abs(l - r)
    if l < r: l += abs(l - r)
    else: r += abs(l - r)
    if etc % 2:
        l += etc//2 + 1
        r += etc//2
    else:
        l += etc//2
        r += etc//2
print(l, r)
cs
반응형