- 문제 : 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

+ Recent posts