반응형
<포스팅 요약>
1. 문제풀러가기
https://www.acmicpc.net/problem/1439
문제 해석:
- 숫자를 뒤집는 최소 횟수 출력하기
예 )
1110000001 일때,
- 1을 0 으로 뒤집을 경우
1번째 행동 : 1110000001 => 0000000001
2번째 행동 : 0000000001 => 0000000000
총 2번의 행동 필요
- 0을 1로 뒤집을 경우
1번째 행동 : 1110000001 => 1111111111
총 1번의 행동 필요
결과:
최소 행동은 1이므로 1출력.
2. 문제 해결 코드
코드 (성공)
import sys
input = sys.stdin.readline
string = str(input())
arr_1 = string.split("1")
arr_0 = string.split("0")
res_1 = 0
res_0 = 0
for i in arr_1:
if "0" in i:
res_1 += 1
for i in arr_0:
if "1" in i:
res_0 += 1
print(min(res_1, res_0))
3. 로직분석
간단한 문제인데, 위 코드는 초보자들이 접근하기 쉬운 코드라고 생각한다. (내가 초보자니까..!!)
1) split을 사용하여 비교
"0"으로 끊었을때 만들어지는 배열과
"1"로 끊었을때 만들어지는 배열을 비교한다.
예)"111001111"일 경우
"0"으로 끊으면 ['111', '', '1111']
"1"로 끊으면 ['', '', '', '00', '', '', '', '']을 출력한다.
2) for문을 사용하여 횟수 카운트
"0"으로 끊었을때 1이 들어있는 원소의 개수를 구한다. => 2개
"1"로 끊었을때 0이 들어있는 원소의 개수를 구한다. =>1개
3) 최소 횟수 출력
2 > 1 이므로 1출력
+++ 추가 ) 다른분들이 짠 코드를 봤는데 ,
for문 하나만 이용해서 숫자가 변경되면 cnt+=1을 해주고 최종적으로 (cnt+1)//2를 해주는 로직을 사용하였다.
내가 짠코드보다 효율적인방법이다..!! 배우고 갑니다~!!!
반응형
'코딩테스트 > 코딩테스트 문제' 카테고리의 다른 글
(백준) 20008번: 몬스터를 처치하자! 상세 풀이 (0) | 2023.02.05 |
---|---|
(백준) 2667번: 단지번호붙이기 파이썬 풀이(BFS&DFS) (0) | 2022.11.27 |
(백준) 17144번: 미세먼지 안녕! - 파이썬 풀이 (0) | 2022.11.24 |
(백준) 18352번: 특정 거리의 도시 찾기 - 파이썬 풀이 (BFS, 그래프) (0) | 2022.11.23 |
(백준) 6148번: Bookshelf 2 파이썬 풀이 (0) | 2022.11.22 |
댓글