일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 자바
- DesignPattern
- javscript
- 백준
- JDBC
- Collection
- 겨울카카오인턴
- 로버트마틴
- 함수형 프로그래밍
- 람다 칼큘러스
- design-pattern
- exception
- Collections
- Pattern
- 큐
- lambda calculus
- Spring
- tcp
- Python
- JavaScript
- 디자인패턴
- functional programming
- Eclipse
- 파이썬
- 프로그래머스
- Rails
- Network
- solid
- Java
- 스택
Archives
- Today
- Total
개발자 노트
[프로그래머스-2019겨울카카오인턴]튜플 본문
문제설명
https://programmers.co.kr/learn/courses/30/lessons/64065
카카오답게 문자열 처리하는 문제
예전에 처음 풀었을 땐 문제를 도저히 이해하지 못해서 넘어갔으나... 그 이유는
원소의 개수가 n개이고, **중복되는 원소가 없는** 튜플 `(a1, a2, a3, ..., an)`이 주어질 때(단, a1, a2, ..., an은 자연수), 이는 다음과 같이 집합 기호 '{', '}'를 이용해 표현할 수 있습니다.
{{a1}, {a1, a2}, {a1, a2, a3}, {a1, a2, a3, a4}, ... {a1, a2, a3, a4, ..., an}}
이렇게 열겨형 정의를 넘어갔기 때문인 것 같다. 이 부분을 잘 보면 튜플의 원소를 하나씩 추가하여 집합으로 표현할 수 있다는 뜻.
접근
위처럼 열거형 정의를 잘 보면 이렇게 생각할 수 있다.
- (1,2,3)이 주어지면 {1},{1,2},{1,2,3}으로 표현할 수 있다.
- 즉, 왼쪽부터 길이가 증가하는 순서대로 집합으로 표현된다.
- 그 집합은 순서가 제멋대로이다.
- {1},{2,1},{3,1,2} 로 주어질 수 있다.
- (2,3,1)이라면
- {2}, {3,2},{2,3,1}로 주어질 수 있음
이렇게 문제를 이해했다면 접근 방법은 50% 짰다고 볼 수 있다. 결국엔 집합의 갯수가 작은 것부터 나열한 뒤 추가되는 수를 차례로 넣어주면 그게 바로 구하려는 튜플.
여기서 부터는 절차는 사람마다 다양할 것 같다.
난 효율성을 전혀 고려하지 않고 python의 장점을 백분이용해서 풀었다.
구현
def parsing(s): #return은 정렬된 값
# parsing작업
s = s[2:-2]
s = s.split("},{")
parsingList = list(s) # return 형태 ['2,1,3,4', '2', '2,1', '2,1,3']
n = len(parsingList)
sortedSets = []
for i in range(n):
sortedSets.append(set(parsingList[i].split(',')))
return sorted(sortedSets)
def solution(s):
answer = []
sortedSets = parsing(s)
n = len(sortedSets)
item = sortedSets[0].copy()
answer.append(int(item.pop()))
for i in range(1,n):
item = sortedSets[i]-sortedSets[i-1]
answer.append(int(item.pop()))
return answer
s = "{{2},{2,1},{2,1,3},{2,1,3,4}}"
print(solution(s))
반응형
'알고리즘 문제 풀이' 카테고리의 다른 글
[프로그래머스]단어변환 (0) | 2020.04.01 |
---|---|
[프로그래머스-2019겨울카카오인턴]불량사용자 (0) | 2020.03.31 |
[프로그래머스-2019겨울카카오인턴]크레인인형뽑기게임 (0) | 2020.03.31 |
[프로그래머스-2019겨울카카오인턴]호텔방배정 (0) | 2020.03.31 |
[백준]5052 전화번호목록 (0) | 2020.03.31 |
Comments