https://school.programmers.co.kr/learn/courses/30/lessons/250121
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
이 문제를 풀면서 좀 더 파이썬스러운 코드는 무엇일지 고민해 볼 수 있었다.
이를 위해 인덱싱과 리스트 컴프리헨션에 좀 더 익숙해지는 게 필요하다고 느꼈다.
data를 파싱해 ext와 val_ext, sort_by와 비교해야하기 때문에 리스트로 인덱싱 하거나, 딕셔너리의 key로 접근해야 한다고 생각했다.
첫 코드는 언어만 파이썬일 뿐 자바 코드와 다를게 없었다.
게다가 index() 메서드를 생각하지 못해 딕셔너리를 사용했다.
딕셔너리의 key, index를 지정하는 부분도 중복되어 코드가 깔끔하지 않다.
def solution(data, ext, val_ext, sort_by):
answer = list()
data_dic = dict()
for i in range(len(data)):
data_dic['code'] = data[i][0]
data_dic['date'] = data[i][1]
data_dic['maximum'] = data[i][2]
data_dic['remain'] = data[i][3]
if data_dic[ext] < val_ext:
answer.append(list(data_dic.values()))
index_dic = {'code': 0, 'date': 1, 'maximum': 2, 'remain': 3}
answer = sorted(answer, key=lambda answer: answer[index_dic[sort_by]])
return answer
answer = [[]] 로 선언되어 있어 빈 배열을 어찌할지 몰라 answer = list()로 수정해버렸다.
(remove() 메서드를 사용하는 방법도 있다.)
파이썬스럽고 간결한 코드로 수정하기 위해 리스트 컴프리헨션을 이용했다.
리스트 컴프리헨션을 이용하면 answer의 빈 배열도 제거할 수 있고, 조건문도 같이 사용해 비교가 가능하다.
def solution(data, ext, val_ext, sort_by):
answer =[[]]
condition_lst = ['code', 'date', 'maximum', 'remain']
answer = [item for item in data if item[condition_lst.index(ext)] < val_ext]
answer = sorted(answer, key=lambda x: x[condition_lst.index(sort_by)])
return answer
'Algorithm' 카테고리의 다른 글
[Python] 프로그래머스 | 숫자의 표현 (1) | 2024.01.19 |
---|---|
[Python] 프로그래머스 | 가장 많이 받은 선물 (2) | 2024.01.05 |
[Python] 프로그래머스 | 실패율 (2) | 2023.12.18 |
[Java] 프로그래머스 | 숫자 문자열과 영단어 (4) | 2023.11.25 |