문제
https://school.programmers.co.kr/learn/courses/30/lessons/64065
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
입출력

해설
문자열이 꽤나 복잡하게 들어와서 어렵다고 느낄 수 있지만 자세히 들여다 보면 규칙이 보이게 된다.
해당 문제는 사실 re라는 정규표현식을 이용하면 굉장히 쉽게 풀 수 있는 문제이지만 정규표현식을 모른다는 가정 하에 풀이를 진행한다.
1. 첫 번째로 입력 중 0, |s| - 1 번째의 문자는 "{}"로 나오므로 잘라놓고 생각을 한다.
2. 튜플의 순서는 상관이 없지만, {a1}, {a1, a2} .. 이런 식의 반복이기 때문에 원소의 갯수에 초점을 맞춘다.
3. x1 집합과 x2 집합을 차집합하게 되면 남는 것이 추가된 원소이다.
위와 같은 방식으로 풀이를 진행하였다.
그리하여 첫 번째로 각각의 튜플에 원소를 저장하고 해당 [원소리스트, 원소리스트의 원소 갯수]로 다시 리스트를 만들어서 정리하였다.
그 다음 sort를 통하여 원소 갯수 기준으로 나열해주었다.
이제는 위에 3번 같이 지금까지 넣은 pre_num이라는 집합을 두고 차집합을 하여 어떤 원소가 새로 추가되었는지 하나씩 뽑아내었다.
마지막으로 해당 숫자를 answer에 추가해주었다.
정답코드
더보기
'''
'25. 09. 13.(토)
1. 튜플의 순서는 바뀌어도 상관없다.
순서
1. ,을 기준으로 자른다.
2. {}이 들어간 튜플을 set(), 길이 순으로 리스트를 만든다.
3. 정렬을 할 때 길이 순으로 정렬한다.
4. 그리고 출력
'''
def solution(s):
split_s = s[1:-1].split(',')
tmp = []#같은 튜플 집합
num_list = []#리스트 만들기
#print(split_s)
for splits in split_s:
#하나의 숫자들이 나오게 된다.
num = int(splits.lstrip('{').rstrip('}'))
tmp.append(num)
#여기서 끝
if splits[-1] == '}':
num_list.append([tmp, len(tmp)])
tmp = []
num_list.sort(key=lambda x: x[1])
pre_num = set()#이미 나온 숫자
answer = [0] * num_list[-1][1]
idx = 0
for lis, length in num_list:
minus = set(lis) - pre_num
input_num = [*minus][0]
answer[idx] = input_num
idx += 1
pre_num.add(input_num)
return answer
깃허브 : https://buly.kr/3NJM5EG
'코딩테스트 > programmers' 카테고리의 다른 글
| 프로그래머스 / 큐 / 프로세스 (0) | 2025.09.21 |
|---|---|
| 프로그래머스 / 해시 / 전화번호 목록 (0) | 2025.09.20 |
| 프로그래머스 / 순열 / 피로도 (0) | 2025.09.08 |
| 프로그래머스 / 해시 / [1차] 캐시 (0) | 2025.09.04 |
| 프로그래머스 / 구현 / 기능개발 (0) | 2025.09.02 |