-
[파이썬 코테 6기] 3주차 세션 정리기타/파이썬 코테 스터디 6기 2021. 8. 11. 22:57
이 글은 프로그래머스에서 진행하는 코딩테스트와 실무 역량 모두 잡는 알고리즘 스터디(Python반) 6기를 참여하면서 일주일에 한 번(매주 수요일) 진행되는 세션에서 배운 내용을 정리하는 글이다.
오늘은 3주차 세션(2021년 08월 11일 진행)에서 배운 내용을 정리해보려고 한다.
https://programmers.co.kr/learn/courses/12441
<세션을 통해 배운 점>
1. *의 또다른 기능
우리는 보통 *라는 기호를 곱셈이라는 연산을 하고자할 때 많이 사용한다.
또는 사용자정의함수를 만들어 인자를 여러 개의 인자를 받기 위해 *args를 사용하거나 인자를 딕셔너리 형태로 받기 위해 **kwargs를 사용하는 경우가 있기는 하다.
이러한 경우 이외에 우리가 유용하게 쓸 수 있는 *의 기능이 있다.
바로 리스트, 튜플, 셋, 딕셔너리 앞에 *를 붙여서 양쪽 괄호를 제거할 수 있는 것이다.
직접 코드를 돌려 결과를 봐보자.
practice_list = [1, 2, 3, 4] print(*practice_list) # 결과: 1 2 3 4 practice_tuple = (1, 2, 3, 4) print(*practice_tuple) # 결과: 1 2 3 4 practice_set = {1, 2, 3, 4} print(*practice_set) # 결과: 1 2 3 4 practice_dictionary = {'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4} print(*practice_dictionary) # 결과: a b c d
이렇계 양쪽 괄호가 제거된 채 안에 있는 원소만 출력되는 것을 볼 수 있고 딕셔너리같은 경우에는 key만 출력되는 것을 볼 수 있다.
더욱 신기한 것은 str형 앞에 *를 쓰면 문자 하나하나 분리된다는 것이다.
string = 'abcde' print(*string) # 결과: a b c d e
2. zip()
파이썬에는 zip()이라는 내장함수가 존재한다.
zip()은 여러 개의 iterable 객체를 인자로 받고 각 객체가 담고 있는 원소를 튜플의 형태로 차례로 접근할 수 있는 iterator를 반환하는 역할을 한다.
설명만 보면 어떠한 역할을 하는지 잘 감이 안오니 코드를 봐보자.
먼저, 두 배열이 있고 두 배열에서 같은 인덱스에 위치한 원소끼리 묶어서 출력하는 코드를 짠다고 생각해보자.
zip()을 모른다면 아래와 같이 코드를 짤 것이다.
numbers = [1, 2, 3] letters = ["A", "B", "C"] for i in range(3): pair = (numbers[i], letters[i]) print(pair) # 결과 # (1, 'A') # (2, 'B') # (3, 'C')
별 다른 문제는 없어보이지만 아래에서 볼 zip() 함수를 쓴다면 조금 더 간결하게 코드를 쓸 수 있다.
numbers = [1, 2, 3] letters = ["A", "B", "C"] for pair in zip(numbers, letters): print(pair) # 결과 # (1, 'A') # (2, 'B') # (3, 'C')
이렇게 zip()함수 안에 두 개의 배열을 넣고 for문을 돌리면 튜플형태로 같은 위치의 인덱스끼리 묶여 출력이 된다.
zip()함수에 들어갈 수 있는 인자의 갯수는 정해져있지 않고 여러 개도 가능하다.
만약에 같이 인자로 들어온 배열들의 길이가 맞지 않는다면 최소 길이 배열에 맞추어 묶이게 된다.
코드와 결과를 보면 아래와 같다.
numbers = [1, 2, 3, 4] letters1 = ["A", "B", "C"] letters2 = ["a", "b", "c", "d"] for pair in zip(numbers, letters1, letters2): print(pair) # 결과 # (1, 'A', 'a') # (2, 'B', 'b') # (3, 'C', 'c')
letters1의 배열의 길이가 3으로 가장 작고 numbers와 letters2의 네번째 원소는 묶이지않아 출력이 안된 것을 볼 수 있다.
3. 배열 90도 회전시키기
오늘 세션에서 배열을 90도 회전시켜 출력시키는 것을 배우기 전에는 코드로 구현하는 것은 매우 어렵고 복잡할 것이라고 생각했다.
하지만 리더님이 알려준 파이썬이라는 언어를 완벽히 활용한 방법은 정말 너무 효율적이라고 생각이 들었다.
기존의 배열을 90도 회전시키는 방법은 아래와 같다.
arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] arr_rotation = [list(reversed(i)) for i in zip(*arr)] print(arr_rotation) #결과: [[7, 4, 1], [8, 5, 2], [9, 6, 3]]
일차원적인 배열 출력으로 보면 90도 회전한 것인지 잘 모를 수 있어 아래에 그림으로 나타내본다.
혹시라도 코딩테스트를 볼 때에 배열을 회전시켜야하는 일이 있다면 알아두었다가 사용하면 좋을 것같다.
<3주차 세션 회고>
오늘은 1시간 정도의 시간적 여유도 있고 스택을 너무 어려워하는 나에게는 라이브로 참여하는 것이 좋겠다는 생각이여서 녹화본이 아닌 라이브 줌(zoom)에 참여했다.
평소, queue나 bfs는 동작원리가 머릿 속으로 그려지고 문제를 봤을 때 어느정도 코드를 구현할 수 있는 수준이라고 생각한다.
하지만, stackdlsk dfs 문제는 뭔가 머릿 속으로 동작원리가 상상이 잘 안되고 제대로 사용할 줄 몰랐다.
이러한 나에게 stack을 다루는 이번 주차는 많은 도움이 되었다.
라이브 코딩을 하면서 리더님이 해주는 말과 유용한 기능들을 알아가면서 stack 문제에 대한 두려움을 조금은 떨칠 수 있었고 머릿 속으로 어느정도 그려지는 것같다.
뭐 세션 하루 들었다고 완벽히 stack을 이해하고 쓸 수는 없겠지만 그래도 새로운 문제를 마주하면 stack을 이렇게 이용하면 되겠다는 생각은 들 수 있을 것같다.
남은 주차는 꽤 난이도 있는 알고리즘들이 있다.
지금까지 세션과 과제 풀이를 통해 얻은 지식만큼 남은 주차에도 얻어서 문제해결능력을 키우고 싶다.
'기타 > 파이썬 코테 스터디 6기' 카테고리의 다른 글
[파이썬 코테 6기] 마지막 세션 최종 후기 (0) 2021.08.25 [파이썬 코테 6기] 4주차 세션 정리 (0) 2021.08.19 [파이썬 코테 6기] 2주차 세션 정리 (0) 2021.08.09 [파이썬 코테 6기] 1주차 세션 정리 (0) 2021.07.29