Algorithm/Greedy
[이것이 코딩 테스트다] 문자열 뒤집기 - Python
눈오는1월
2023. 8. 24. 23:25
728x90
<풀이>
이 문제같은 경우 나는 값이 0에서 1로 변하든 1 에서 0으로 변하든 몇번 변하는지 횟수를 알아낸 다음 그 횟수에 + 1 한 후에 2로 나눠서 답을 구했다.
왜 위처럼 생각을 했냐면, 같은 숫자들이 반복해있는 묶음들의 개수를 구한다. 이 묶음의 개수를 구하려면 변하는 지점마다 +1을 해줘야 하고 마지막 으로 +1을 해야지 마지막으로 변하고 이후 끝나는 지점의 묶음의 개수도 구할 수 있다.
<코드>
s = input()
result = 0
com_val = s[0]
cnt = 0
for i in range(1,len(s)):
if com_val != s[i]:
cnt += 1
com_val = s[i]
# print(cnt)
cnt = cnt + 1
result = cnt // 2
print(result)
<교재 풀이>
내가 처음에 시도하려고 했던 방식이랑 똑같은 풀이로 풀었다.
맨 처음 값을 변수에 저장 한 후 에 이 값이 0인지 1인지 확인을 한다 또한 변하는 지점을 숫자를 세는 것은 동일하나 1로 바뀌는지 0으로 바뀌는지 나눠서 개수를 구한 후 둘중 작은 값을 출력하는 방식으로 문제를 풀었다.
<교재 코드>
data = input()
count0 = 0
count1 = 0
if data[0] == "1":
count0 += 1
else:
count1 += 1
for i in range(len(data) - 1):
if data[i] != data[i+1]:
if data[i + 1] == "1":
count0 += 1
else:
count1 += 1
print(min(count0,count1))
728x90