Programming/백준
[실버 1] 백준 27970 - OX (파이썬)
pental
2025. 5. 8. 12:13
https://www.acmicpc.net/problem/27970
풀이
- 문자열 S가 주어집니다. S는 'O'와 'X'로만 구성되어 있다.
- 우리는 문자열 내 'O'들이 가지는 “가중치 합”을 구해야 한다.
- 'O'가 있는 위치의 2의 거듭제곱 값을 더한다.
- 결과는 1,000,000,007 (10^9 + 7) 로 나눈 나머지를 출력한다.
✅ 풀이 로직
- power는 현재 인덱스의 2의 거듭제곱 값을 의미한다.
- 예를 들어, 인덱스 0: 2^0, 인덱스 1: 2^1, …, 인덱스 i: 2^i
- 문자열을 왼쪽부터 오른쪽으로 순회하면서
- 만약 해당 문자가 'O'라면, answer에 현재의 power 값을 더한다.
- 그 후 power *= 2 로 2의 거듭제곱을 갱신한다.
- 중간중간 mod 연산으로 값을 줄여준다.
코드
# 백준 27970 - OX
# 분류 : 수학
S = input()
mod = int(1e9 + 7)
answer = 0
power = 1
for i in range(len(S)) :
if S[i] == "O" :
answer += power
answer %= mod
power *= 2
power %= mod
print(answer)