def solution(s):
answer = []
sLst = []
sortedSLst = []
# 앞, 뒤 두 개씩 있는 {, }를 제거한 후 .split("},{")
ss = s[2:-2].split("},{")
# 풀이과정 1
for i in ss:
sLst.append(i.split(','))
# 풀이과정 2
sortedSLst = sorted(sLst, key=len)
# 풀이과정 3
for element in sortedSLst:
for num in element:
n = int(num)
if n not in answer:
answer.append(n)
return answer
풀이과정
1. 주어진 s를 리스트로 나타냄 → 문자열에서 "{ }" 사이에 "," 로 구분된 문자열들을 추출
2. 각 원소의 길이를 기준으로 오름차순 sLst 정렬
3. for문을 돌면서 새로 추가된 숫자를 answer에 append
Dictionary를 이용한 다른 풀이
def solution(s):
answer = []
sLst = []
sortedSLst = []
lstDict = {}
# 앞, 뒤 두 개씩 있는 {, }를 제거한 후 .split("},{")
ss = s[2:-2].split("},{")
# 주어진 s를 리스트로
for i in ss:
sLst.append(i.split(','))
# 풀이과정 2
for element in sLst:
for num in element:
n = int(num)
if n in lstDict:
lstDict[n] += 1
else:
lstDict[n] = 1
# 풀이과정 3
sortedDict = sorted(lstDict.items(), key = lambda item: item[1], reverse=True)
# 풀이과정 4
for i in range(len(sortedDict)):
answer.append(sortedDict[i][0])
return answer
풀이과정
1. 주어진 s를 리스트로 나타냄 → 문자열에서 "{ }" 사이에 "," 로 구분된 문자열들을 추출
2. dictionary에 각 숫자가 몇 번 나왔는지 숫자를 세서 {숫자:개수} 형태로 저장
3. value(개수)를 기준으로 정렬
4. 정렬된 리스트의 key만 answer에 append
-) dictionary를 사용하는 방법으로 구현을 하려다가 막혔을 때, 각 원소의 길이를 기준으로 정렬해둔 후에 새로 추가된 숫자만 찾으면 된다는 아이디어를 생각해내지 못했다. 여러가지 방향으로 생각해보는 게 필요할 것 같다.
+) 처음 생각한 방법인 dictionary를 사용한 방법은 처음엔 구현이 막막했지만, 주어진 s를 리스트로 바꾸고 난 뒤에는 쉽게 구현하였다. 이 방법이 시간도 덜 걸리고 더 좋은 것 같다.
'코테연습문제' 카테고리의 다른 글
[Programmers/Python] 문자열 압축 (0) | 2023.04.20 |
---|---|
[Programmers/Python] 수식 최대화 (0) | 2023.04.19 |
[Programmers/Python] 메뉴 리뉴얼 (0) | 2023.04.17 |
[Programmers/Python] 개인정보 수집 유효기간 (0) | 2023.04.15 |
[백준/Python] 1966 프린터 큐 (0) | 2023.02.24 |