반응형
프로그래머스: 튜플 풀이
문제풀러가기
https://programmers.co.kr/learn/courses/30/lessons/64065?language=python3
문제 분석
1. 저 문자열안에 있는 숫자들만 꺼내, 리스트로 만들면 쉽게 해결할 수 있다.
2. 문자열 길이가 작은 순서대로 정렬한 후, 앞 부터 차례대로 숫자를 리스트에 중복되지 않게 넣어주면 된다.
코드1:
* 효율성이 낮지만, 일반적으로 생각해낼 수 있는 로직
def solution(s):
s=s[1:-1]
s=s.split("},")
for i in range(len(s)):
if i==((len(s))-1):
s[i]=(s[i])[1:-1]
else:
s[i]=(s[i])[1:]
s=sorted(s, key=lambda x:len(x))
rs=[]
string=""
for i in s:
a=i.split(',')
for j in a:
if int(j) not in rs:
print(j)
rs.append(int(j))
return rs
코드1 풀이
def solution(s):
s=s[1:-1] #s문자열의 처음과 끝에 있는 대 괄호를 잘라준다
s=s.split("},") # "},"를 기준으로 잘라서 리스트를 만들어준다.
# s=['{2', '{2,1', '{2,1,3', '{2,1,3,4}'] 이런식으로 리스트가 만들어진다.
for i in range(len(s)):
if i==((len(s))-1): # s리스트에서 마지막 요소의 "{"과 "}"를 잘라준다
s[i]=(s[i])[1:-1]
else: #s리스트에서 마지막 요소 외의 요소들에서, "{"를 잘라준다
s[i]=(s[i])[1:]
s=sorted(s, key=lambda x:len(x)) #길이가 짧은순으로 정렬한다.
#s=['2', '2,1', '2,1,3', '2,1,3,4']
rs=[]
string=""
for i in s:
a=i.split(',') #요소마다 ","를 기준으로 다른 리스트를 만들어준다
for j in a: #새로 만든 리스트안의 요소를 rs리스트에 집어 넣는다.
if int(j) not in rs: #rs에 없는 요소만 집어넣고 rs에 이미 있으면 패스한다.
print(j)
rs.append(int(j))
return rs
코드2 :
*코드1과 같지만 코드1을 조금 더 다듬은 코드
def solution(s):
s=s[2:-2].split("},{") #코드1의 for문 부분을 이 한줄로 대체할 수 있다.
s=sorted(s, key=lambda x:len(x))
rs=[]
string=""
for i in s:
a=i.split(',')
for j in a:
if int(j) not in rs:
rs.append(int(j))
return rs
<잡담>
잡담부분에는 항상 문제를 풀고 난 후의 느낀점 혹은 배운점을 기록하려고 합니다.
이번 문제는 어렵지는 않았지만, 처음에 잘못 접근하면 꼬여버릴 수 있는 문제였던것 같습니다.
처음에 split("}.{") 를 해주면 쉬웠을 거를..!!
바보같이 for문 돌려서 더 복잡하게 코드를 짜게 됐네요 ㅠ_ㅠ
다음엔 처음부터 효율성 좋은 코드를 생각해낼 수 있길..!!
반응형
'코딩테스트 > 코딩테스트 문제' 카테고리의 다른 글
코딩테스트 준비 - 프로그래머스: 다리를 지나는 트럭 풀이/상세 설명/스택과 큐 (파이썬) (0) | 2021.07.02 |
---|---|
코딩테스트 준비 - 프로그래머스: 괄호 회전하기 풀이 (파이썬) (0) | 2021.07.02 |
코딩테스트 준비 - 프로그래머스:메뉴 리뉴얼 풀이/Counter,combinations (파이썬) (0) | 2021.07.02 |
코딩테스트 준비 - 프로그래머스: 예상 대진표 풀이 (파이썬) (1) | 2021.07.01 |
코딩테스트 준비 - 프로그래머스: 괄호 변환 풀이/재귀함수 문제 (파이썬) (2) | 2021.07.01 |
댓글