[Algorithm] 20310. 타노스

유지민·2024년 2월 14일
0

Algorithm

목록 보기
27/75
post-thumbnail

20310. 타노스

20310 문제 보기

접근 방식

처음 이 문제에 접근한 방식은
코드로 작성했을 땐 다음과 같이 25점의 부분점수만을 받았다.

import sys
from collections import Counter
input = sys.stdin.readline

S = input().rstrip()
counter = Counter(S)
zero_cnt, one_cnt = counter['0'], counter['1']
arr = [0] * (zero_cnt//2) + [1] * (one_cnt//2)
print(*arr, sep='')

첫번째 시도 때 접근했던 방식은 Counter 모듈을 이용해 0과 1의 개수를 세줬고,
사전순으로 정렬함은 0이 앞에 와야 하므로 0의 절반의 개수만큼 앞에, 1의 절반의 개수만큼 뒤에 위치하도록 했다.

하지만 문자열의 순서를 유지하며 절반을 제거해야하므로 위의 내 풀이는 제대로 틀렸다!!!

  1. 1은 앞에서부터 제거하기
  2. 0은 뒤에서부터 제거하기
import sys
input = sys.stdin.readline

S = list(input().rstrip())
zero_cnt, one_cnt = S.count('0') // 2, S.count('1') // 2

for _ in range(zero_cnt):
  S.pop(-S[::-1].index('0') - 1)

for _ in range(one_cnt):
  S.pop(S.index('1'))

print(''.join(S))

pop() 함수를 통해 1은 앞에서부터, 0은 뒤에서부터 제거해주도록 인덱스를 각각 구해 인자로 넘겼다.

최종 코드

import sys
input = sys.stdin.readline

S = list(input().rstrip())
zero_cnt, one_cnt = S.count('0') // 2, S.count('1') // 2

for _ in range(zero_cnt):
  S.pop(-S[::-1].index('0') - 1)

for _ in range(one_cnt):
  S.pop(S.index('1'))

print(''.join(S))

배운점

▶️ 문제의 예외 조건 잘 확인하기
▶️ pop(index) 활용

profile
끊임없이 도전하며 사고하는 주니어 Web 개발자 유지민입니다.

0개의 댓글