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) 로 나눈 나머지를 출력한다.

✅ 풀이 로직

  1. power는 현재 인덱스의 2의 거듭제곱 값을 의미한다.
    • 예를 들어, 인덱스 0: 2^0, 인덱스 1: 2^1, …, 인덱스 i: 2^i
  2. 문자열을 왼쪽부터 오른쪽으로 순회하면서
    • 만약 해당 문자가 'O'라면, answer에 현재의 power 값을 더한다.
    • 그 후 power *= 2 로 2의 거듭제곱을 갱신한다.
  3. 중간중간 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)