티스토리 뷰
문제 링크
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
- Introduction to algorithms
- 치닝디핑
- 마스터킹
- introduction to algorithms third edtion
- CHUWI HI8
- 하스스톤
- 연습문제
- conda
- PYTHON
- 개봉기
- 멜킨스포츠
- anaconda
- codewars
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |