티스토리 뷰

문제 링크 

https://www.codewars.com/kata/53368a47e38700bd8300030d/train/python

딕셔너리 배열로 이름을 입력 받아서 정해진 포맷으로 출력하는 문제이다. 

내 풀이는 아래와 같다.

def namelist(names):
str = ''
for i,dic in enumerate(names, 1):
if i != len(names) :
str = str + dic['name'] + ', '
elif len(names) == 1 :
str = dic['name']
else :
str = str[:-2] + ' & ' + dic['name']
return str

names의 길이가 1인경우 이름만 출력하게 해주고 나머지 경우는 전부 이름뒤에 ', '을 붙여줬다. 그리고 맨 마지막 배열에 도달하면 뒤에 두칸을 제외한 스트링에 ' & '와 이름을 붙여서 리턴해주었음


가장 많은 표를 받은 풀이는 아래와 같다

def namelist(names):
if len(names) > 1:
return '{} & {}'.format(', '.join(name['name'] for name in names[:-1]),
names[-1]['name'])
elif names:
return names[0]['name']
else:
return ''

format 메서드로 & 을 기준으로 두 부분으로 나누어준다.

format 함수는 스트링에서 {}로 처리된 부분을 format 함수에 들어온 인자의 순서대로 배치해주는 함수이다.

 names배열에서 -1 까지 는 join으로 이름을 붙여 줬다. join함수에는 String으로 이루어진 list를 인풋으로 받는데 각 인자들을 조인 앞에 쓰인 문자로 연결하는 역할을 한다. join에 인자로 넘겨준 리스트는 python의 list comprehension을 이용해서 생성했다. 익숙하지 않은 모양이라

http://www.secnetix.de/olli/Python/list_comprehensions.hawk

http://studymake.tistory.com/193

아래 두 사이트를 참고해서 조금 공부를 했다. 기본형태는 

[ 표현식 for문 (for 문 | if 문)* ] 이다. 중복 for문도 한줄에 처리 할 수 있고 간단한 if문도 넣을 수 있었다. for 문을 돌면서 표현식으로 된 리스트를 반환한다.

그리고 배열을 하나씩 확인하면서 나간게 아니라 2이상인 배열과 1이하인 경우로 나누고 1이하중에서 names를 elif 값으로 넘겨줘서 배열이 1개 존재하면 바로 이름만 출력하도록 나누었다. 빈 배열이 아닐경우 if 에 true를 넘겨준다. 


'개발 > Quiz' 카테고리의 다른 글

[codewars] Pete, the baker  (0) 2017.12.20
[codewars] Sort the odd  (0) 2017.12.17
Take a Number And Sum Its Digits Raised To The Consecutive Powers And ....¡Eureka!!  (0) 2017.12.11
Complementary DNA  (0) 2017.12.11
Count the number of Duplicates  (0) 2017.12.09
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함