알고리즘/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
|
a = 'qwertyasdfgzxcvb'
b = 'uiophjklnm'
s = [*input()]
l, r, etc = 0, 0, 0
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
p = 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 |
반응형