강의로 돌아가기
JeHwanYoo

이게 좋은 코드라고 할 수 있을까요?

강의 정말 잘 보고 있습니다!

이번 문제 답은 맞췄는데

파이썬 초보인지라 잘 짠 코드인지 잘 모르겠습니다.

my_str = input().strip()

import collections

def unzip(tup_list):
    return (
        list(map(lambda x: x[0], tup_list)),
        list(map(lambda x: x[1], tup_list))
    )

most_common = collections.Counter(my_str).most_common()
counts = unzip(most_common)[1]
max_count = max(counts)
answer = ''.join(sorted(unzip(list(filter(lambda x: x[1] == max_count, most_common)))[0]))

print(answer)
1 개의 답변
Demi

안녕하세요. 이 문제에는 정해진 답이 없기 때문에 collections를 이용해 원하시는 대로 풀면 됩니다. (물론 Python philosophy는 단 한 가지 방법만 있다고 말하겠지만요 ^^;)

다만 코드 길이를 줄일 수 있는 부분이 있어요. 꼭 코드가 짧은 게 좋은 것만은 아니지만 공부할 때 참고하시라고 적어둡니다.

# 이전
counts = unzip(most_common)[1]
max_count = max(counts)

# 이후 - 한줄로 바꾸기
max_count = most_common[0][1]
# 이전 - unzip과 lambda를 이용
def unzip(tup_list):
    return (
        list(map(lambda x: x[0], tup_list)),
        list(map(lambda x: x[1], tup_list))
    )
...
answer = ''.join(sorted(unzip(list(filter(lambda x: x[1] == max_count, most_common)))[0]))


# 이후 -unzip을 따로 이용하지 않고, list comprehension을 이용해 한줄로 만들기
answer = ''.join(sorted([i[0] for i in most_common if i[1]==max_count]))

제가 함수형 코드를 잘 못짜기 때문에, lambda-filter를 이용한 코드는 신선한 것 같네요!
저도 덕분에 좋은 공부했습니다. 감사합니다.

답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.