[BOJ] 1439: 뒤집기

이슬비·2023년 2월 16일
0

Algorithm

목록 보기
84/110
post-thumbnail

꺄호 해결 완료 ~!

1. 내 풀이: 성공

import sys
input = sys.stdin.readline

s = input()
check = False
cnt = 0

for i in range(len(s)-2):
    if s[i] != s[i+1] and not check:
        cnt += 1
        check = True
    elif s[i] != s[i+1] and check:
        check = False
print(cnt)

풀이는 다음과 같다.

일단 문자열 s를 받아준다. 그 다음으로 check 변수는 다른 숫자가 되었을 때 그 숫자가 지금 연속인지를 체크하는 것이다. 예를 들어

0001100

이라는 문자열이 있을 때 인덱스 2에서 3으로 넘어가는 순간 다른 숫자 1이 되므로 check 변수를 True 로 바꿔준다.
그리고 인덱스 3(1)과 인덱스 4(1)은 동일하므로, 그냥 넘어가게 되고,
elif 문에 의해서 인덱스 4(1)에서 인덱스 5(0)로 넘어가는 순간 두 숫자는 서로 다르지만 연속을 확인하는 변수 checkTrue 였으므로 카운팅을 하지 않고 check 변수만 따로 False , 즉 연속된 문자 확인을 종료하는 것으로 바꾸어 둔다.

이렇게 하면 끝!

2. 다른 풀이

S = input()
count = 0
for i in range(len(S)-1):
    if S[i] != S[i+1]:
        count += 1
print((count + 1) // 2)

풀이 출처: https://hazung.tistory.com/116

오호 ... 그냥 나누기 하는 방법이 있었다 !!!
역시 문제 해석을 잘하고, 그 조건에 따라서 케이스 구분만 잘해주면 훨씬 더 쉽게 풀 수 있는 것 같다.

3. 마치며

그래도 이제 그리디 실버 4, 5 정도는 건들 수 있게 되었다. 차근차근 올라가서 골드도 뿌셔버리자 ~!

profile
정말 알아?

0개의 댓글