본문 바로가기
코딩테스트/코딩테스트 문제

(백준) 1439번: 뒤집기 파이썬 풀이 (초간단)

by 공부가싫다가도좋아 2022. 11. 25.
반응형

<포스팅 요약>

1. 문제풀러가기

2. 문제 해결 코드

3. 로직 분석


1. 문제풀러가기

https://www.acmicpc.net/problem/1439

 

1439번: 뒤집기

다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 다솜이는 이 문자열 S에 있는 모든 숫자를 전부 같게 만들려고 한다. 다솜이가 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모

www.acmicpc.net

 

문제 해석:

- 숫자를 뒤집는 최소 횟수 출력하기

예 ) 

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를 해주는 로직을 사용하였다.

내가 짠코드보다 효율적인방법이다..!! 배우고 갑니다~!!!

 

 

반응형

댓글