영숫자로 이루어진 문자열 s가 주어졌을 때, 문자열의 "평균 문자"가 존재하는지 확인하고, 존재한다면 해당 문자를 반환해야 합니다. 여기서 평균 문자란 문자열 내 각 문자의 ASCII 값 평균에 내림(floor)을 적용한 값을 의미합니다.
예를 들어 입력이 s = "pqrst"라면 출력은 'r'입니다. 각 문자의 ASCII 값은 p=112, q=113, r=114, s=115, t=116이며, 이들의 평균은 (112 + 113 + 114 + 115 + 116) / 5 = 570 / 5 = 114입니다. ASCII 값 114에 해당하는 문자는 'r'이기 때문입니다.
문제 해결 접근 방법
다음 단계를 따라 문제를 해결할 수 있습니다.
- 합계(total)를 0으로 초기화합니다.
- 문자열 s의 각 문자 ch에 대해 다음을 반복합니다.
- total에 해당 문자의 ASCII 값을 더합니다.
- avg := total을 문자열 길이로 나눈 값의 내림(정수 부분)
- ASCII 값이 avg인 문자를 반환합니다.
예제 코드
아래 코드에서 ord() 함수는 문자를 ASCII 코드 값으로 변환하고, chr() 함수는 ASCII 코드 값을 다시 문자로 변환하는 역할을 합니다. 또한 math.floor()를 사용해 평균값의 소수점 아래를 버립니다.
from math import floor
def solve(s):
total = 0
for ch in s:
total += ord(ch)
avg = int(floor(total / len(s)))
return chr(avg)
s = "pqrst"
print(solve(s))
입력
"pqrst"
출력
r
이처럼 문자열의 모든 문자를 순회하며 ASCII 값을 누적한 뒤, 평균을 구하고 내림 처리하면 원하는 평균 문자를 손쉽게 얻을 수 있습니다. 시간 복잡도는 O(n)으로, 문자열의 길이에 비례하여 효율적으로 동작합니다.