코딩 테스트(Python)/백준, 프로그래머스
1439 뒤집기
5_hyun
2022. 1. 13. 01:04
반응형
https://www.acmicpc.net/problem/1439
1439번: 뒤집기
다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 다솜이는 이 문자열 S에 있는 모든 숫자를 전부 같게 만들려고 한다. 다솜이가 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모
www.acmicpc.net
내가 풀었던 풀이(내가 풀음)
n = input()
s = []
j = 0
for i in range(len(n)):
if(i == len(n)-1):
s.append(n[i])
break
if(n[i]==n[i+1]):
continue
else:
s.append(n[j:i+1])
j = i+1
c0 = 0
c1 = 0
for i in range(len(s)):
if(s[i][0]=='0'):
c0 += 1
else:
c1 += 1
print(min(c0, c1))
우선 0의 연속과 1의 연속으로 된 문자로 나눠서 s 리스트에 집어 넣는다. 나눌때는 s.append(n[j:i+1])을 사용하여 나눠준다. n[0:3]이면 0부터 2까지의 자리수를 자른다. 그리고선 0과 1로 시작하는 것이 각각 몇개인지 파악해주고 가장 적은 값이 최소 뒤집는 횟수이다.
구글링
S = input()
count = 0
for i in range(len(S)-1): #그냥 len(s)로 하면 밑에 if 문에서 범위 오류가 나기 때문이다
if S[i] != S[i+1]:
count += 1
print((count + 1) // 2)
0000100은 결국 010으로 볼 수 있다. 그래서 연속해서 같은 숫자가 오지 않으면 count에 +1을 해준다.
0이나 1은 0번, 길이 1
01은 1번, 길이 2
010은 1번, 길이 3
0101은 2번, 길이 4
01010은 2번, 길이 5
010101은 3번, 길이 6
0101010은 3번, 길이 7
이런식으로 나온다. 그래서 ((길이) + 1) // 2가 값입니다.
반응형