일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 리터럴 타입
- 투포인터
- autosize
- tailwind
- TS
- CI/CD
- CORS
- React
- map
- 반공변성
- 공변성
- async/await
- 이분 검색
- ESlint
- dfs
- 태그된 유니온
- recoil
- app router
- webpack
- SSR
- 무한 스크롤
- 인터섹션
- 결정 알고리즘
- Jest
- Cypress
- RTK Query
- 호이스팅
- useAppDispatch
- 타입 좁히기
- Promise
Archives
- Today
- Total
짧은코딩
1439 뒤집기 본문
반응형
https://www.acmicpc.net/problem/1439
내가 풀었던 풀이(내가 풀음)
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