https://school.programmers.co.kr/learn/courses/30/lessons/12973
시도 1
문자열 길이가 1백만이기 때문에 예외처리를 먼저 진행해야한다.
- 전체 길이가 홀수면 나눠질 수 없음
- 문자열의 각 알파벳 갯수가 홀수 이면 나눠질 수 없음
- 전체길이가 알파벳 종류 갯수의 약수가 아니면 나눠질 수 없음
55.2
점으로 탈락
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
def solution(s):
length = len(s)
# 홀수 이면 나눠질 수 없음
if length % 2 == 1:
return 0
# 문자열의 각 알파벳의 갯수가 홀수 이면 나눠질 수 없음
alpha = []
for i in s:
if i not in alpha:
alpha.append(i)
for i in alpha:
if s.count(i) % 2 == 1:
return 0
# 전체길이가 알파벳 종류 갯수의 약수가 아니면 나눠질 수 없음
if length % len(alpha) != 0:
return 0
# 알파벳 종류만큼 돌면서
for i in range(len(alpha)):
for a in alpha:
# 문자열에 연속되는 알파벳이 있으면 삭제해줌
s = s.replace(a+a,'')
# 문자열이 비었으면 성공
if s == '':
return 1
return 0
# while True:
|
시도 2
스택 사용하여 알파벳을 스택에 넣으면서 이전값과 같으면 팝, 다르면 푸쉬하여 스택이 비어져있으면 1을 리턴한다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
def solution(s):
stack = []
for i in range(len(s)):
# print(stack)
if not stack:
stack.append(s[i])
else:
if s[i] == stack[-1]:
stack.pop()
else:
stack.append(s[i])
if stack:
return 0
else:
return 1
|
다른사람 풀이
스택이 있는지 없는지를 판별해 리턴할때 한줄로 return not(stack)
으로 표시가 가능
1
2
|
...
return not(stack)
|