[프로그래머스/코딩테스트/Python] 튜플 문제풀이

2021. 7. 29. 17:06·Minding's Programming/프로그래머스 코딩테스트
728x90
반응형

https://programmers.co.kr/learn/courses/30/lessons/64065

 

코딩테스트 연습 - 튜플

"{{2},{2,1},{2,1,3},{2,1,3,4}}" [2, 1, 3, 4] "{{1,2,3},{2,1},{1,2,4,3},{2}}" [2, 1, 3, 4] "{{4,2,3},{3},{2,3,4,1},{2,3}}" [3, 2, 4, 1]

programmers.co.kr

 


문제 설명

 

셀수있는 수량의 순서있는 열거 또는 어떤 순서를 따르는 요소들의 모음을 튜플(tuple)이라고 합니다. n개의 요소를 가진 튜플을 n-튜플(n-tuple)이라고 하며, 다음과 같이 표현할 수 있습니다.

  • (a1, a2, a3, ..., an)

튜플은 다음과 같은 성질을 가지고 있습니다.

  1. 중복된 원소가 있을 수 있습니다. ex : (2, 3, 1, 2)
  2. 원소에 정해진 순서가 있으며, 원소의 순서가 다르면 서로 다른 튜플입니다. ex : (1, 2, 3) ≠ (1, 3, 2)
  3. 튜플의 원소 개수는 유한합니다.

원소의 개수가 n개이고, 중복되는 원소가 없는 튜플 (a1, a2, a3, ..., an)이 주어질 때(단, a1, a2, ..., an은 자연수), 이는 다음과 같이 집합 기호 '{', '}'를 이용해 표현할 수 있습니다.

  • {{a1}, {a1, a2}, {a1, a2, a3}, {a1, a2, a3, a4}, ... {a1, a2, a3, a4, ..., an}}

예를 들어 튜플이 (2, 1, 3, 4)인 경우 이는

  • {{2}, {2, 1}, {2, 1, 3}, {2, 1, 3, 4}}

와 같이 표현할 수 있습니다. 이때, 집합은 원소의 순서가 바뀌어도 상관없으므로

  • {{2}, {2, 1}, {2, 1, 3}, {2, 1, 3, 4}}
  • {{2, 1, 3, 4}, {2}, {2, 1, 3}, {2, 1}}
  • {{1, 2, 3}, {2, 1}, {1, 2, 4, 3}, {2}}

는 모두 같은 튜플 (2, 1, 3, 4)를 나타냅니다.

특정 튜플을 표현하는 집합이 담긴 문자열 s가 매개변수로 주어질 때, s가 표현하는 튜플을 배열에 담아 return 하도록 solution 함수를 완성해주세요.

 

 

[제한사항]

  • s의 길이는 5 이상 1,000,000 이하입니다.
  • s는 숫자와 '{', '}', ',' 로만 이루어져 있습니다.
  • 숫자가 0으로 시작하는 경우는 없습니다.
  • s는 항상 중복되는 원소가 없는 튜플을 올바르게 표현하고 있습니다.
  • s가 표현하는 튜플의 원소는 1 이상 100,000 이하인 자연수입니다.
  • return 하는 배열의 길이가 1 이상 500 이하인 경우만 입력으로 주어집니다.

[입출력 예]

s result
"{{2},{2,1},{2,1,3},{2,1,3,4}}" [2, 1, 3, 4]
"{{1,2,3},{2,1},{1,2,4,3},{2}}" [2, 1, 3, 4]
"{{20,111},{111}}" [111, 20]
"{{123}}" [123]
"{{4,2,3},{3},{2,3,4,1},{2,3}}" [3, 2, 4, 1]

 

입출력 예에 대한 설명입출력 예 #1

문제 예시와 같습니다.

입출력 예 #2

문제 예시와 같습니다.

입출력 예 #3

(111, 20)을 집합 기호를 이용해 표현하면 {{111}, {111,20}}이 되며, 이는 {{20,111},{111}}과 같습니다.

입출력 예 #4

(123)을 집합 기호를 이용해 표현하면 {{123}} 입니다.

입출력 예 #5

(3, 2, 4, 1)을 집합 기호를 이용해 표현하면 {{3},{3,2},{3,2,4},{3,2,4,1}}이 되며, 이는 {{4,2,3},{3},{2,3,4,1},{2,3}}과 같습니다.

 


문제풀이

함수에 주어지는 s가 문자열이기 때문에, replace함수를 통해서 중괄호({})를 먼저 없애준 다음,

공백을 기준으로 변수들을 묶어 리스트로 만들고 길이별로 정렬한다.

 

이렇게 만들어준 리스트들을 set(집합)의 차집합(빼기) 기능을 이용해 하나씩 정답리스트에 추가하는 방식으로 풀이했다.

def solution(s):
    answer = []
    s = s.replace('{', ' ')
    s = s.replace('}', ' ')
    s = s.split(' ')
    sentence = s
    for idx, i in enumerate(sentence):
        if i == '' or i == ',':
            del s[idx]
    del s[0]
    del s[-1]
    tuple_list = []
    for j in s:
        tuple_list.append(list((j.split(','))))
    tuple_list = sorted(tuple_list, key=len)
    answer.append(int(tuple_list[0][0]))
    
    for t in range(len(tuple_list)-1):
        a = list(set(tuple_list[t+1]) - set(tuple_list[t]))
        answer.append(int(a[0]))
    return answer

머리속에 그려진대로만 코드를 작성하다보니, 쓸데없는 코드가 많이 생겼다.

정규표현식 등을 사용했으면 훨씬 짧은 코드를 만들 수 있었을텐데, 오히려 쉬운문제라고 생각하다보니 코드가 복잡해졌다.

 

 

다른 사람의 풀이

 

def solution(s):

    s = Counter(re.findall('\d+', s))
    return list(map(int, [k for k, v in sorted(s.items(), key=lambda x: x[1], reverse=True)]))

import re
from collections import Counter

Counter와 정규표현식을 사용해서 간단하게 풀이했다.

앞으로 문제를 풀 때는 파이썬 라이브러리의 기능을 적극 활용할 수 있어야 하겠다.

728x90

'Minding's Programming > 프로그래머스 코딩테스트' 카테고리의 다른 글

[프로그래머스 코딩테스트/Python] 올바른 괄호 문제풀이  (1) 2024.08.29
[프로그래머스/코딩테스트/파이썬] 거리두기 확인하기 문제풀이  (0) 2021.08.05
[프로그래머스/코딩테스트/Python] 수식최대화 문제풀이  (0) 2021.06.22
[프로그래머스/코딩테스트/파이썬] 영어 끝말잇기 문제풀이  (0) 2021.06.16
[프로그래머스/코딩테스트/파이썬] 뉴스 클러스터링 문제풀이  (0) 2021.06.10
'Minding's Programming/프로그래머스 코딩테스트' 카테고리의 다른 글
  • [프로그래머스 코딩테스트/Python] 올바른 괄호 문제풀이
  • [프로그래머스/코딩테스트/파이썬] 거리두기 확인하기 문제풀이
  • [프로그래머스/코딩테스트/Python] 수식최대화 문제풀이
  • [프로그래머스/코딩테스트/파이썬] 영어 끝말잇기 문제풀이
Minding
Minding
  • Minding
    Today's Minding
    Minding
  • 전체
    오늘
    어제
    • 울고넘는 딥러닝 (278)
      • Minding's Baseball (57)
        • MLB Statcast (29)
        • 머신러닝으로 홈런왕 예측하기 (3)
        • 야구칼럼 (12)
        • 야구 규칙, 용어 (1)
        • 2022-23 질롱 코리아 (8)
        • 류현진 등판경기 (4)
      • Minding's Programming (185)
        • 프로그래머스 코딩테스트 (21)
        • Knowledge (44)
        • Numpy & Pandas (6)
        • Excel (3)
        • Git (1)
        • Pygame (11)
        • CV (3)
        • Tensorflow tutorial (4)
        • Kaggle and Dacon (4)
        • 에러 코드 (8)
        • FastAPI (8)
        • Airflow (29)
        • Crawling (6)
        • Django (14)
        • AWS (18)
        • Spark (5)
      • Minding's Reading (30)
        • 머신러닝 딥러닝에 필요한 기초 수학 with 파이.. (2)
        • 칼만필터는 어렵지 않아 (11)
        • 밑바닥부터 시작하는 딥러닝 (6)
        • 메이저리그 야구 통계학 2e (8)
        • 논문읽기 (2)
        • 빅데이터를 지탱하는 기술 (1)
      • Minding's Life (5)
        • 주식 (4)
        • 각종 소식 (1)
  • 블로그 메뉴

    • 홈
    • Baseball
    • Programming
    • Reading
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    AWS
    데이터분석
    MLB
    코딩테스트
    에어플로우
    파이썬게임개발
    칼만필터는어렵지않아python
    딥러닝
    Python
    넘파이
    pygame
    야구
    Airflow
    KalmanFilter
    메이저리그
    게임개발
    django
    프로그래머스
    칼만필터는어렵지않아
    mlb stats api
    django python
    칼만필터는어렵지않아파이썬
    데이터 엔지니어
    파이썬
    질롱코리아
    KBO
    칼만필터
    머신러닝
    FastAPI
    파이게임
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Minding
[프로그래머스/코딩테스트/Python] 튜플 문제풀이
상단으로

티스토리툴바