반응형
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

짧은코딩

1439 뒤집기 본문

코딩 테스트(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가 값입니다.

반응형

'코딩 테스트(Python) > 백준, 프로그래머스' 카테고리의 다른 글

1543 문서검색  (0) 2022.01.16
16953 A->B  (0) 2022.01.14
1541 잃어버린 괄호  (0) 2022.01.12
4797 캠핑  (0) 2022.01.11
2217 로프  (0) 2022.01.11
Comments