반응형
https://school.programmers.co.kr/learn/courses/30/lessons/12973
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이 (1차 시도)
테스트에서 거의 실패였다.....
좀 더 효율성 있는 코드로 짜야겠다
def solution(s):
answer = -1
frontElement = ""
lis = list(s)
while True:
for i, char in enumerate(lis):
if frontElement == char:
lis.pop(i)
lis.pop(i-1)
frontElement = char
if len(lis) == len(s):
return 0
if len(lis) == 0:
return 1
return answer
풀이 (2차 시도)
또 다시 실패
def solution(s):
answer = -1
pivot = ""
lis = list(s)
window = []
while len(lis) > 1:
for i, char in enumerate (lis):
if char == pivot:
window.append(lis.pop(i))
window.append(lis.pop(i-1))
pivot = char
if len(window) == 0:
window.clear()
return 0
풀이 (3차 시도)
replace 함수로 풀었더니 많이 괜찮아졌다
def solution(s):
lis = []
for i in s:
if i not in lis:
lis.append(i)
while True:
savedLength = len(s)
for j in lis:
s = s.replace(j*2, "")
if len(s) == savedLength:
return 0
if len(s) == 0:
break
return 1
풀이 (4차 시도)
2개 이상 있는 알파벳만 리스트로 저장해서 제거하는 방법으로 했는데
오히려 더 낮은 점수를 얻었다
def solution(s):
lis = []
stl = list(s)
for i in stl:
# print(i, stl.count(i))
if stl.count(i) % 2 == 0:
lis.append(i)
stl = list(filter((i).__ne__, stl))
while True:
savedLength = len(s)
for j in lis:
s = s.replace(j*2, "")
if len(s) == savedLength:
return 0
if len(s) == 0:
break
return 1
풀이 (5차 시도)
재귀 함수식으로 풀면 효율성 테스트에서 input 문자열이 길기때문에 애초에 성공하지 못하는거 같다.....
Stack을 이용하는 방식으로 풀어야겠다
def solution(s):
lis = []
for i in s:
if i not in lis:
lis.append(i)
while True:
savedLength = len(s)
#알파벳이 홀수면 0을 반환
if s.count(i) % 2 == 1:
return 0
for j in lis:
s = s.replace(j*2, "")
if len(s) == savedLength:
return 0
if len(s) == 0:
break
return 1
풀이 (6차 시도)
Stack을 이용하면 쉽게 풀린다.
def solution(s):
stack = []
s = list(s)
for i in s:
if not stack: # 만약 stack이 비여있다면
stack.append(i)
elif stack[-1] == i:
stack.pop()
continue
else:
stack.append(i)
if not stack:
return 1
else:
return 0
반응형
'코딩 테스트 > Programmers' 카테고리의 다른 글
[Python] [Level 2] N개의 최소공배수 (0) | 2022.10.22 |
---|---|
[Python] [Level 2] 구명보트 (min과 max를 정하기) (0) | 2022.10.21 |
[Python] [Level 2] 영어 끝말잇기 (리스트로 중복 제거하기) (1) | 2022.10.11 |
[Python] [Level 2] 카펫 (루트와 약수를 활용하기) (0) | 2022.10.08 |
[Python] [Level 2] 다음 큰 숫자 (bin 함수, count 함수 활용하기) (0) | 2022.10.08 |