- 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/64065
Lv2 문제이고, 스스로 푼 문제다!
그렇게 어려운 문제는 아닌 것 같은데 문자열을 내가 원하는 상태로 변경하는데 시간을 꽤 쓴 것 같다. 총 1시간 반 걸려서 푼 문제,,,ㅎ
빠르게 푸는 법을 공부해야할 것 같다
문제 이해
s의 각 원소들 안에서 순서가 다르기 때문에 올바른 튜플을 구하기 위해선
길이가 1인 원소부터 가장 긴 원소까지 진행하면서 누적된 수 중에서 겹치지 않는 숫자를 answer에 추가하면 된다고 생각했다
- 정답 풀이 :
1. 각각의 {}원소들을 배열 []로 바꾸고 싶어서 처음에 양끝에 있는 {,}를 없앤다
2. 그러면 원소들의 형태가 '{11,2,3,', ,,,, '{11,2,3,4,5}'의 형태가 되는데
각 원소에서 { 또는 }를 모두 제거한다(첫번째 반복문)
3. 그러면 '11,2,3', ,,, '11,2,3,4,5'의 형태가 되는데 여기서 ','를 기준으로 split하면 리스트가 되므로 이를 result에 넣어준다
* 더 간단한 방법이 있을텐데 일단 이 방법이 최선이었고, 무엇보다 원소들이 다 한자리 수가 아니라 2자리 수 이상인 수들도 있어서 원소 하나하나씩 구별할 경우 111이 1,1,1로 바뀌는 경우가 있어 이를 피하기 위해 each.split(',')한 것이기도 하다
이렇게 하면 내가 원하는 [[11,2,3],,,,[11,2,3,4,5]]의 형태가 된다
4. 원소 길이가 가장 작은 것부터 가장 큰 것까지 차례로 진행할 것이기 때문에 가장 큰 원소 길이가 필요해 max_len을 구하는 반복문을 추가했다
5. 길이가 1부터 max_len까지 진행하면서 길이가 i인 result의 원소 리스트(each)에 대하여 answer에 없는 each의 원소를 each에 추가해준다(이때 each의 원소를 모두 int()처리해주는 것 잊지말자!)
예시) answer = [2,1] 이고 each = [1,2,3] 인 경우에는 3만 answer에 없으므로 이를 추가하는 로직을 수행한다
def solution(s):
answer = []
#원소 갯수 작은것부터 정렬한다음 없는 원소들 하나씩 추가하면 될 것 같은데
temp = s[1 : -1].split('},')
result = []
for each in temp:
if each[0] == '{':
each = each[1:]
if each[-1] == '}':
each = each[:-1]
each = each.split(',')
result.append(each)
max_len = 0
for each in result:
max_len = max(max_len, len(each))
for i in range(1, max_len + 1):
for each in result:
if len(each) == i:
for j in each:
if int(j) not in answer:
answer.append(int(j))
return answer
- 시도해본 풀이 :
이렇게 하면 {{123}}과 같이 두자리 이상의 수를 처리하는데 틀린 답을 출력한다
def solution(s):
answer = []
#원소 갯수 작은것부터 정렬한다음 없는 원소들 하나씩 추가하면 될 것 같은데
temp = list(s)[1 : -1]
print(temp)
sequence = []
while temp:
x = temp.pop(0)
if x == '{':
result = []
while True:
y = temp.pop(0)
if y == '}':
break
if y == ',':
continue
result.append(int(y))
sequence.append(result)
print(sequence)
max_len = 0
for i in sequence:
max_len = max(max_len, len(i))
for i in range(1, max_len + 1):
for each in sequence:
if len(each) == i:
for j in each:
if j not in answer:
answer.append(j)
return answer
'코딩테스트 > 기출' 카테고리의 다른 글
[2022 KAKAO BLIND RECRUITMENT/프로그래머스] 92341번 : 주차요금 계산 (0) | 2022.09.18 |
---|---|
[2018 KAKAO BLIND RECRUITMENT / 프로그래머스] 17677번 : [1차] 뉴스 클러스터링 (0) | 2022.09.18 |
[/ 프로그래머스] 17680번 : [1차] 캐시 (0) | 2022.09.12 |
[월간 코드 챌린지 시즌2/ 프로그래머스] 76502번 : 괄호 회전하기 (0) | 2022.09.12 |
[연습문제 / 프로그래머스] 12949번 : 행렬의 곱셈 (1) | 2022.09.11 |