https://school.programmers.co.kr/learn/courses/30/lessons/64065
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이 과정
튜플을 표현하는 집합을 문자열로 받아서 튜플을 출력하는 문제이다.
튜플은 순서가 다르면 원소가 같더라도 다른 튜플이지만, 집합은 순서가 달라도 같은 집합이다. 한 튜플을 표현하는 집합은 다양한 순서로 입력받을 수 있는데 어떻게 하나의 튜플을 식별이 가능한가?
어떤 순서로 들어와도 동일하게 처리하기 위해서 집합을 길이가 짧은 순서대로 오름차순 정렬을 해버리면 된다.
{1, 2, 3}, {2, 1}, {1, 2, 4, 3}, {2}가 어떤 튜플을 가리키는지 알기 위해서는 길이 순서대로 정렬을 하면,
{2}, {2, 1}, {1, 2, 3}, {1, 2, 4, 3}이 되는데 숫자가 추가된 순서대로 튜플에 원소를 넣어주면 집합이 어떤 튜플을 표현하는지 쉽게 알 수 있다. 앞에 표현한 집합은 (2, 1, 3, 4) 튜플을 표현함을 알 수 있다.
문자열로 들어온 집합을 어떻게 처리할지는 정답이 없지만 [[1, 2, 3], [2, 1], [1, 2, 4, 3], [2]]와 같은 2차원 리스트로 받은 후 길이 순으로 정렬해서 문제를 해결하게끔 구현하였다.
소스 코드
def solution(s):
answer = []
temp = [[]]
temp_num = 0
for index in range(len(s)-1):
if s[index].isnumeric():
temp_num *= 10
temp_num += int(s[index])
elif s[index] == ',':
if s[index-1] == '}' and s[index+1] == '{':
continue
temp[-1].append(temp_num)
temp_num = 0
elif s[index] == '}':
temp[-1].append(temp_num)
temp_num = 0
temp.append([])
del temp[-1]
temp.sort(key=len)
for i in temp:
for j in i:
if j not in answer:
answer.append(j)
return answer
'알고리즘 문제 풀이 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 카카오프렌즈 컬러링북 [C++] (0) | 2022.08.13 |
---|---|
프로그래머스 - 멀쩡한 사각형 [C++] (0) | 2022.08.04 |
프로그래머스 - 짝지어 제거하기 [파이썬] (0) | 2022.07.02 |
프로그래머스 - [1차] 뉴스 클러스터링 [파이썬] (0) | 2022.07.02 |
프로그래머스 - 괄호 변환 [파이썬] (0) | 2022.07.02 |