yooniiverse
개발 블로그
yooniiverse
전체 방문자
오늘
어제
  • 분류 전체보기
    • 운영체제
    • 네트워크
    • ~2023.02
      • 외부교육
      • 대외활동
      • 스터디
      • 동아리
      • TIL
      • IT지식
      • 기타
      • 트러블 슈팅
      • 프로그래밍
      • Python
      • Java
      • JS
      • DB(SQL)
      • JSP
      • Spring
      • 기술면접
      • 자바
      • 코딩테스트
      • 자료구조
      • 알고리즘
      • 백준 문제풀이
      • 인공지능
      • 머신러닝
      • 프로젝트
      • 안드로이드 앱개발
      • 웹개발
      • 웹 서비스
      • 웹퍼블리싱
      • Node.js 백엔드 개발
      • CS
      • 1일 1CS지식
      • 운영체제
      • 네트워크
      • 데이터베이스
      • 정보처리기사
      • 도서 리뷰
      • 개발 관련 도서
      • 기타 도서

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
yooniiverse

개발 블로그

~2023.02/백준 문제풀이

[Python] 백준 1439번 : 뒤집기

2022. 3. 9. 21:32

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

 

1439번: 뒤집기

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

www.acmicpc.net

[ 내 코드 ]

num_list = list(input())
count = 0

for i in range(len(num_list)):
  if i == 0:
    first = num_list[i]
  elif i == 1:
    if first != num_list[1]:
      count += 1
  else:
    if num_list[i] != num_list[i-1]:
      count += 1

if count == 1:
  print(1)
elif count == 0:
  print(0)
elif count % 2 != 0:
  print(int(count / 2) + 1)
else :
  print(int(count / 2))

[ 클린 코드 ]

data = input()
count0 = 0 # 전부 0으로 바꾸는 경우
count1 = 0 # 전부 1로 바꾸는 경우

if data[0] == '1':
  count0 += 1
else:
  count1 += 1

for i in range(len(data) - 1):
  if data[i] != data[i + 1]:
    # 다음 수에서 1로 바뀌는 경우
    if data[i + 1] == '1':
      count0 += 1
    # 다음 수에서 0으로 바뀌는 경우
    else:
      count1 += 1

print(min(count0, count1))
  • 문자열에 있는 숫자를 모두 0 혹은 모두 1로 만들어야 한다.
  • 다음의 두 가지 경우를 모두 계산하면 된다.
  • 문자열 S의 길이는 100만 이하이므로, 시간 복잡도는 O(N)에 해결해야 한다.
    1. 모두 0으로 만드는 경우
      • | 0 | 0 | 0 | 1 | 1 | 0 | 0 | => 횟수 1
    2. 모두 1로 만드는 경우
      • | 0 | 0 | 0 | 1 | 1 | 0 | 0 | => 횟수 2
  • 구체적인 알고리즘 예시) 모두 1로 만드는 경우
    • 첫 번째 원소가 0인 경우
    • 2개씩 원소를 비교할 때, 1에서 0으로 바뀌는 경우
      • | 0 | 0 | 0 | 1 | 1 | 0 | 0 | => 횟수 2

 

 

 

'~2023.02 > 백준 문제풀이' 카테고리의 다른 글

[Python] 백준 1092번 : 배  (0) 2022.03.11
[Python] 백준 2012번 : 등수 매기기  (0) 2022.03.09
[Python] 백준 5585번 : 거스름돈  (0) 2022.03.09
[JAVA] 백준 단계별로 풀어보기_5단계(1차원 배열)  (0) 2022.02.11
[JAVA] 백준 단계별로 풀어보기_4단계(while문)  (0) 2022.02.08
    '~2023.02/백준 문제풀이' 카테고리의 다른 글
    • [Python] 백준 1092번 : 배
    • [Python] 백준 2012번 : 등수 매기기
    • [Python] 백준 5585번 : 거스름돈
    • [JAVA] 백준 단계별로 풀어보기_5단계(1차원 배열)
    yooniiverse
    yooniiverse

    티스토리툴바