728x90
반응형
https://programmers.co.kr/learn/courses/30/lessons/77886?language=python3#
코딩테스트 연습 - 110 옮기기
0과 1로 이루어진 어떤 문자열 x에 대해서, 당신은 다음과 같은 행동을 통해 x를 최대한 사전 순으로 앞에 오도록 만들고자 합니다. x에 있는 "110"을 뽑아서, 임의의 위치에 다시 삽입합니다. 예를
programmers.co.kr
최종 코드
GitHub - hwayeon351/Programmers-Algorithms: 프로그래머스 알고리즘 소스 코드 모음
프로그래머스 알고리즘 소스 코드 모음. Contribute to hwayeon351/Programmers-Algorithms development by creating an account on GitHub.
github.com
def move_110(s):
stack = []
cnt = 0
for c in s:
stack.append(c)
if c == '0' and stack[-3:] == ['1', '1', '0']:
del stack[-3:]
cnt += 1
idx = -1
for i in range(len(stack)):
if stack[i] == '0':
idx = i
return "".join(stack[:idx+1]) + "110"*cnt + "".join(stack[idx+1:])
def solution(s):
answer = []
for ss in s:
answer.append(move_110(ss))
return answer
풀이 과정
def move_110(s):
stack = []
#110 개수
cnt = 0
#문자열 s를 한 글자씩 stack에 담는다
for c in s:
stack.append(c)
#stack의 마지막 3글자가 110인 경우,
if c == '0' and stack[-3:] == ['1', '1', '0']:
#110을 삭제해주고 cnt를 카운팅 한다
del stack[-3:]
cnt += 1
#cnt개의 110을 끼워 넣을 자리 구하기
idx = -1
for i in range(len(stack)):
#마지막 0이 있는 자리를 구한다
if stack[i] == '0':
idx = i
#stack의 마지막 0이 있는 자리까지 문자열로 바꾸고 cnt개의 110을 깨워넣고 나머지 stack에 담긴 글자를 문자열로 바꿔서 이어붙인다
return "".join(stack[:idx+1]) + "110"*cnt + "".join(stack[idx+1:])
def solution(s):
answer = []
for ss in s:
answer.append(move_110(ss))
return answer
#시간복잡도 = O(n^2), 공간복잡도 = O(n)
728x90
반응형
'코테 노트 > 프로그래머스' 카테고리의 다른 글
Level 3 풍선 터트리기 Python 3 (0) | 2022.03.23 |
---|---|
Level 3 공 이동 시뮬레이션 Python 3 (0) | 2022.03.22 |
Level 3 퍼즐 조각 채우기 Python 3 (0) | 2022.03.15 |
Level 3 아이템 줍기 Python 3 (0) | 2022.03.15 |
Level 3 금과 은 운반하기 Python 3 (0) | 2022.03.14 |