728x90
32034. 동전 쌍 뒤집기
난이도 : 플래티넘 5
소요 시간 : 25분
날짜 : 2025.01.02
언어 : 파이썬
알고리즘 유형 : 스택, 그리디
설명 보기전에 문제 풀어보러 가기
1. 문제 설명
- N개의 동전이 일렬로 놓여있다.
- 조작을 원하는대로 할 수 있다.
- 서로 이웃하고, 같은 면인, 두 개의 동전을 둘 다 뒤집기
- 모든 동전이 앞면이 보이게 할 수 있는가? 가능하다면 최소 조작횟수를 구하라.
2. 해결 방식
자료구조 : 스택을 활용한다.
- 먼저 뒷면의 위치를 저장하고 개수를 센다.
- 뒷면의 개수가 2로 나누어지지 않으면 불가능, 0이면 답이 0
- 뒷면인 동전들을 돌면서 스택을 활용한다.
- 스택이 비어있다면 스택에 넣기
- 스택의 마지막 요소와 현재 요소의 인덱스 차이가 짝수라면, 가운데의 앞면을 다 뒤집고 다시 뒷면으로 다 뒤집으면 모두 앞면이 되므로, 스택에서 pop()해주고, 인덱스 차이만큼 결과값에 더해주기
- 스택의 마지막 요소와 현재 요소의 인덱스 차이가 홀수라면, 스텍에 넣기
3. 정답 코드
import sys; input = sys.stdin.readline
def sol(s):
t_loc = []
res = 0
for i, c in enumerate(s):
if c == 'T':
t_loc.append(i)
size = len(t_loc)
if size % 2:
print(-1)
return
if not size:
print(0)
return
stack = []
for i in range(size):
if not stack:
stack.append(i)
continue
j = stack[-1]
if (t_loc[i] - t_loc[j]) % 2:
res += (t_loc[i] - t_loc[j])
stack.pop()
else:
stack.append(i)
print(-1 if stack else res)
for _ in range(int(input())):
_, S = input(), input().strip()
sol(S)
반응형
'백준 문제풀이 코드저장소 > Platinum' 카테고리의 다른 글
Baekjoon 3946. 랜덤 걷기 / Python (0) | 2025.01.06 |
---|---|
Baekjoon 6549. 히스토그램에서 가장 큰 정사각형 / Python (0) | 2025.01.06 |
Baekjoon 1019. 책 페이지 / Python (0) | 2024.12.31 |
Baekjoon 16566. 카드 게임 / Python (0) | 2024.06.30 |