2019. 9. 14. 22:19ㆍ개발노트
1. 2차원 리스트를 1차원 리스트로 만들기
-문자열을 담은 이차원 리스트, mylist 가 solution 함수의 파라미터로 주어집니다. solution 함수가 mylist를 일차원 리스트로 만들어 리턴하도록 코드를 작성해주세요.
파이썬의 sum함수를 사용해서 풀 수 있습니다.
def solution(mylist):
answer = sum(mylist, [])
return answer
이외에도 다양한 방법이 있습니다.
my_list = [[1, 2], [3, 4], [5, 6]]
# 방법 1 - sum 함수
answer = sum(my_list, [])
# 방법 2 - itertools.chain
import itertools
list(itertools.chain.from_iterable(my_list))
# 방법 3 - itertools와 unpacking
import itertools
list(itertools.chain(*my_list))
# 방법4 - list comprehension 이용
[element for array in my_list for element in array]
# 방법 5 - reduce 함수 이용1
from functools import reduce
list(reduce(lambda x, y: x+y, my_list))
# 방법 6 - reduce 함수 이용2
from functools import reduce
import operator
list(reduce(operator.add, my_list))
2. 순열과 조합
-숫자를 담은 일차원 리스트, mylist에 대해 mylist의 원소로 이루어진 모든 순열을 사전 순으로 리턴하는 함수 solution을 완성해주세요.
import itertools
def solution(mylist):
answer = list(map(list, itertools.permutations(mylist)))
answer.sort()
return answer
itertools를 사용해 순열을 쉽게 구할 수 있습니다.
itertools.permutations(mylist) 한 결과를 리스트에 넣으면
[(2, 1), (2, 1)] 처럼 출력됩니다.
문제에서는 [[1, 2], [2, 1]]와 같은 형태를 원하기 때문에
map을 사용해서 형변환하고 sort로 리스트의 순서를 정렬했습니다.
3. 가장 많이 등장하는 알파벳 찾기
-이 문제에는 표준 입력으로 문자열, mystr이 주어집니다. mystr에서 가장 많이 등장하는 알파벳만을 사전 순으로 출력하는 코드를 작성해주세요.
파이썬의 collections.Counter 클래스를 사용하면 이 코드를 간략하게 만들 수 있습니다.
from collections import Counter
my_str = input().strip()
my_str = sorted(my_str)
cnt = Counter(my_str)
cnt= cnt.most_common()
collect = []
for i in range(0, len(cnt)):
if cnt[i][1] is cnt[0][1]:
collect.append(cnt[i][0])
print(''.join(collect))
output은 알파벳 순서대로 나와야 하는 조건이 있어서 sorted함수를 사용했습니다.
문자열 분석을 위해 Counter에 문자열을 넣어주고
most_common 메소드를 사용하면 'aab' 문자열을 다음과 같이 [('a', 2), ('b', 1)] 형태로 나타 낼 수 있습니다.
for 문으로 최대로 나온 문자값과 중복되는 문자를 찾아서 리스트에 넣습니다.
4. for 문과 if문을 한번에
-정수를 담은 리스트 mylist를 입력받아, 이 리스트의 원소 중 짝수인 값만을 제곱해 담은 새 리스트를 리턴하는 solution함수를 완성해주세요. 예를 들어, [3, 2, 6, 7]이 주어진 경우
- 3은 홀수이므로 무시합니다.
- 2는 짝수이므로 제곱합니다.
- 6은 짝수이므로 제곱합니다.
- 7은 홀수이므로 무시합니다.
def solution(mylist):
answer = [ i**2 for i in mylist if i %2 == 0]
return answer
BNF 문법을 사용합니다. 위 코드에서 볼 수 있듯
for 문을 가운데 두고 if문 조건이 성립하면 for문 오른쪽 성립하지 않으면 for문 왼쪽의 식을 적용합니다.
위 코드를 예로 들면,
mylist가 for문을 돌며 i에 들어가고 좌, 우에 if문이 하나씩 있다고 보면 편합니다.
*참고
5. 두 변수의 값 바꾸기 - swap
a = 3
b = 'abc'
temp = a
a = b
b = temp
보통 위 코드처럼 temp 변수를 두고 두 변수의 값을 바꿉니다.
파이썬에서는 간단하게 값을 바꿀 수 있습니다.
a = 3
b = 'abc'
a, b = b, a