본문 바로가기
SW사관학교 정글/개발일지

[WEEK03] 개발일지 (부제: set💖과 소소한 행복 찾기)

by 대범하게 2022. 10. 13.
반응형

※ 개발일지가 아니라 일기일 수도 있는 점 양해바랍니다. 오전, 오후, 새벽이 모두 담겨있어요.
※ WEEK 시작인 매주 목요일에 업데이트 됩니다. 많.관.부 

DAY01 22.10.06 (목) from Jungle import Knowledge

  벌써(?) 3주차이다. 사실 일주일 됐을 때 2주를 체감했고, 2주가 됐을 때 4주를 체감했는데 돌이켜보니 일단 했다.

이번 시험은 B반이 먼저 시험을 봤고, 문제는 쿼드트리, PPAP, 소수곱이 나왔다. 저번 주에 색종이 만들기를 공부하면서 힌트에 '쿼드트리를 만드는 문제'라고 해서 '쿼드트리가 뭐냐!!' 하면서 혼자 공부를 했었는데 문제에 나와서 반가웠다. 하지만, 공부를 하지 않았다면 과연 풀 수 있었던 문제일까 생각해보면 잘 모르겠다.. 아직 재귀에 대한 두려움(?)이 남아있는 것 같다. PPAP 문제도 풀 수 있을듯 말듯 하게 못 풀어 아쉬움이 남았다. 다음주에는 정말 제대로 한 문제 맞추고 싶다.

  WEEK03 개발일지를 적으러 들어오면서 다짐을 하도록 목표를 세워놔야겠다.

이번주 목표는 하, 중, 상 모든 문제를 다 보고 이해하기이다. 사실 2주간에 걸쳐서 하, 중 문제만 풀어도 빠듯했기 때문에 상 문제를 보지도 못한게 있는데 정말 코치님 말씀대로 어떻게 다 연결되어있는 느낌을 받았다. 30분 고민하고, 안 되면 정답을 보고 이해를 한 다음에 코드를 적어보면서 공부하는 방식으로 진행해야겠다. 빠르게 '하'를 풀면서 개념 정리를 하고, 모르는 부분은 더 추가하는 식으로 진행해야지 더 밀도있게 공부할 수 있을 것 같다. 이렇게 계획대로 진행된다면 다음주 목요일 당일부터 다음주 내용을 바로 볼 수 있다. 그래야,, 개발일지도 안 밀리고 작성가능 !

발제에서 적었던 NL언니의 요약을 찍은 사진을 찍은 사진 & 치즈 버거 맛집 플레이 버거의 앤디워홀 버거와 크레이티브 버거 ..... From Team 5


DAY02 22.10.07 (금) Ejin TamSaek Tree Nal Michigae mandeulda

Today I Learned

1. defaultdict()

defaultdict()는 딕셔너리를 만드는 dict 클래스의 서브 클래스이다. defaultdict()는 인자로 주어진 객체의 기본값을 딕셔너리값의 초깃값으로 지정할 수 있다. 외부함수이기 때문에 import를 해야한다. (from collections import defaultdict)

아래 사진의 코드는 defaultdict(list)를 함으로써 디폴트값이 list인 딕셔너리를 만들었다. 다음과 같이 설정하면 값을 지정하지 않은 키는 그 값이 0으로 지정된다.

즉, defaultdict라는 말 그대로 처음 키를 지정할 때 값을 주지 않으면 해당 키에 대한 디폴트 값을 지정하겠다는 뜻이다.

간단하게 각 성이 가진 이름을 취합하는 것을 확인할 수 있다.
이 그림을 이용해 설명을 들었기 때문에 첨부..ㅎ

2. graph = {i:[] for i in range(1, N+1)}

graph = {i:[] for i in range(1, N+1)} 으로 딕셔너리안에 key의 갯수와 key에 대응하는 value가 리스트임을 선언해줄 수 있다.

아래 사진과 같이 예를 들어 N이 5이면 딕셔너리 안에 1부터 5까지의 key와 리스트가 초기화 된다.

출력값을 보면 1부터 5까지의 key 값이 만들어지는 것을 볼 수 있다.

3. 입력받는 값만 알고 입력의 개수를 모를 때

preorder = []
while True:
    try:
        preorder.append(int(sys.stdin.readline()))
    except:
        break

4. 그래프와 트리의 차이점, 전위 순회, 중위 순회, 후위순회 

 

[알고리즘] 그래프와 트리 & 백준(트리 순회)

그래프 그래프는 현상이나 사물을 정점(Vertex) 또는 노드(Node), 간선(Edge)으로 표현하기 위해 사용한다. - 노드(Node) : 위치를 말함, 정점(Vertex)라고도 함 - 간선(Edge) : 위치 간의 관계를 표시한 선으

bo5mi.tistory.com


DAY03 22.10.08 (토) Why does the time go so fast?

Today I Learned

1. 반복문으로 딕셔너리의 키-값 쌍을 모두 출력하기

딕셔너리를 출력해보면 키와 키 값에 해당하는 value 값이 들어간 것을 볼 수 있다.

 

파이썬 코딩 도장: 25.2 반복문으로 딕셔너리의 키-값 쌍을 모두 출력하기

이번에는 딕셔너리와 for 반복문을 사용하여 간단하게 모든 키-값 쌍을 출력해보겠습니다. >>> x = {'a': 10, 'b': 20, 'c': 30, 'd': 40} >>> for i in x: ...     print(i, end=' ') ... a b c d for i in x:처럼 for 반복문

dojang.io

2. append, extend의 차이

list.append(x)는 리스트 끝에 x 1개를 그대로 넣는다.

list.extend(iterable)는 리스트 끝에 가장 바깥쪽 iterable의 모든 항목을 넣는다.

append는 x 그 자체를 원소로 넣고 extend는 iterable의 각 항목들을 넣는다.

3. bfs, dfs

내가 공부했던 코드는

need_visited(방문 대기열)이 없을 때까지 진행하면서 (while need_visited:)

1) bfs의 경우에는 queue를 활용하여 방문 대기열을 가장 처음 원소를 제거 (node = need_visited.pop(0))

2) dfs의 경우에는 stack을 활용하여 방문 대기열을 가장 마지막 원소를 제거 (node = need_visited.pop())

=> 물론 stack에서 pop()을 하는 것이기 때문에 recursion과 반대 방향으로 dfs를 한다. 재귀와 같은 결과값이 나오게 하려면 key의 value 값들을 뒤집어주는 방법을 쓰면 된다고 하는데, 이럴 바엔 재귀를 해서 dfs를 구현하는게 나을 것 같다.

 

1), 2) 방식 외의 "코드가 동일하다"는 점에서 놀라웠다. 

물론 dfs의 경우에 재귀로 구현하는 방법이 더 직관적일 수도 있지만 한 코드를 완벽하게 이해하면 bfs와 dfs 모두 구현가능하다는 점에서 메리트가 있는 것 같다. (다시 생각해봤는데 재귀가 최고다...)

재귀함수를 만드는 것에 익숙해지자 ....! !

4. 그래프와 트리, 전위순회, 중위 순회, 후위순회

 

[알고리즘] 그래프와 트리, 전위순회, 중위순회, 후위순회& 백준(트리 순회)

그래프 그래프는 현상이나 사물을 정점(Vertex) 또는 노드(Node), 간선(Edge)으로 표현하기 위해 사용한다. - 노드(Node) : 위치를 말함, 정점(Vertex)라고도 함 - 간선(Edge) : 위치 간의 관계를 표시한 선으

bo5mi.tistory.com

평화로운 오전 12시의 문지동과 백준 푸는 NL 언니....(?)


DAY04 22.10.09 (일) sapjil again and again and again and again

Today I Learned

1. DFS, BFS의 직관적인 코드를 익히게 되었다. 

 

2. 미로탐색, 특정 거리의 도시찾기

=> 코드를 구현하는 부분에 생각보다 오래 걸렸다. 답을 보고 이해도 꽤나 걸림. 

 

3. 코드리뷰 10PM

코드 리뷰(?) 하면서 굳이 없어도 되는 코드를 많이 발견하고 고쳤다. 코드 리뷰 이후에 커밋을 정리해서 main에 올려놓으니 마음이 편안(? 사실 안 편안)하다 ㅎ

dfs: 자기 자신을 호출하면서 자기 공간이 있다...

bfs: 주머니를 수기로 만든다....while을 활용하여 주머니를 다 쓸 때까지...


DAY05 22.10.10 (월) 토마토마토마토마토마토마토마토마토마토

Today I Learned

1. 3차원 배열도 착착 만들기/3차원 배열에 값 넣기

3d_arr = [[0 for _ in range(column)] for _ in range(row)] for _ in range(level)]

2. 재귀 사용시 setrecursionlimit으로 깊이 지정해주기

import sys
sys.setrecursionlimit(10**9)

HI 언니 벨로그 보다가 setrecursionlimit가 pypy에서 안 돌아간다는 걸 알게 되었다..

3. list는 goodaegi,,,,,, set is god....

From WH Velog

4. BFS 뿌셔 DFS 뿌셔

 

[알고리즘] BFS 뿌셔 DFS 뿌셔

BFS - BFS = Breath-First Search - 가까운 노드부터 우선 탐색 : s로부터 거리가 k+1인 한 정점을 만나기 전에, s로부터의 거리가 k인 정점을 모두 발견하는 알고리즘 (CLSR에 적힌 정의) - 큐 자료구조를 이

bo5mi.tistory.com


DAY06 22.10.11 (화) SO HARD DAY ~

Today I Learned

1. input 받을 때 조심해야할 것

이런 적이 없었는데 코드가 동일한데 계속 ValueError가 발생해서 input 받는 것에서 문제가 있다고 판단. 순서 조심 !

# 틀린 순서
import sys
input = sys.stdin.readline
sys.stdin = open("11725/input.txt","r")
# ValueError: invalid literal for int() with base 10: '\n'

# 옳은 순서
import sys
sys.stdin = open("11725/input.txt","r")
input = sys.stdin.readline

 

WH 오빠의 토마토마토 변수명을 pallet로 쓴 설득력과 GS오빠의 집요함 .... ^^ 결국 난 탈출을 탈출하지 못 했다 . KAK !


DAY07 22.10.12 (수) Sigan... Muji.... SOONSAK....

Today I Learned

1. 2차원 배열 입력받기(같은 결과, 다른 줄 수)

2. 딕셔너리로부터 키값만 구하기 => .keys()

딕셔너리는 키-값 쌍으로 저장된다. 딕셔너리에 있는 키 값만 구하려면 어떻게 해야하는가!!!!!

파이썬의 딕셔너리는 keys라는 메서드를 제공한다.

따라서 키 값만 구하고 싶을 때는 "딕셔너리이름.keys()"라고 호출하면 된다.

 

그런데 언제 딕셔너리로부터 키 값만 구해야하는가? 이것도 참 옳은 질문...

예를 들어, cur_price 딕셔너리를 통해 어떤 주식 종목에 대한 현재가를 조회하고 싶다면 먼저 해당 종목명이 cur_price라는 딕셔너리에 있는지 확인해야 한다. 이를 위해 cur_price라는 딕셔너리에서 키 값을 구해와야겠지??

cur_price = {'Daum KAKAO': 80000, 'naver':800000, 'daeshin':30000}
cur_price.keys()
# dict_keys(['naver', 'Daum KAKAO', 'daeshin'])

keys 메서드의 반환값을 보면 리스트로 표현된거 같기도 한데 그 앞에 'dict_keys'가 있는 것을 볼 수 있다.

keys 메서드의 반환값은 리스트가 아니며, 리스트로 만들려면 list라는 키워드를 이용해 타입을 변환해야한다. 

list(cur_price.keys())
# ['naver', 'Daum KAKAO', 'daeshin']

이 과정을 한 번에 하는 방법이 있다.

cur_price = {'Daum KAKAO': 80000, 'naver':800000, 'daeshin':30000}
# 딕셔너리 키: 재고 확인
stock_list = list(cur_price.keys())
stock_list
# 결과값 : ['naver', 'Daum KAKAO', 'daeshin']

# 딕셔너리 값: 가격 확인
price_list = list(cur_price.values())
price_list
# 결과값 : [80000, 80000, 30000]

3. 이진 트리, 이진 검색 트리(복습 겸 정리)

 

[알고리즘] 이진 트리, 이진 검색 트리 & 백준(이진 탐색 트리, 트리의 순회)

이진트리(Binary Tree) : 노드가 왼쪽 자식(left chile)과 오른쪽 자식(right child)만 가진다. 자식이 없을 수도 있다. (최대 두 개의 자식 노드를 가지는 트리 형태의 자료구조로서, 단순히 값을 저장하기

bo5mi.tistory.com

BS오빠가 "마우스"로 직접 그린 백준 문제 풀고 결과를 기다리며 기도하는 나를 본 따봉동치가 은총을 내려주는 천지창조에서 영감을 받은 "작품".. 마스터피스 ..... 그 자체.... WEEK03 끝~!

소회

WEEK03이 끝났다. 정말 모두가 말하길 '이번주 시간 너무 빨라'였다. 모두가 시간의 빠름을 느꼈고, 분명 주말에도 공부를 했고, 밥 먹고 정비하는 시간 외에는 컴퓨터 앞에 있었는데 이번주의 목표와 다르게 상 문제를 모두 풀지 못했다. (뿌엥) 한 주의 시작을 목요일로 만든 운영진의 의도를 정말 피부로 느끼고 있고 정말 시간이 없다. 여기서 더 쪼개고 더 쪼갤 수 있을까 싶긴 한데 알고리즘 주차보다 다가올 주차에는 더 여유가 없다는 말이 정말 무섭다.. 이번주 시험에서 1번 문제는 풀었고, 2번 문제를 아깝게 (?)는 아니고 여튼 구현을 못했다. 정확히 생각한 것을 구현하지 못 했는데 JH오빠가 설명하는걸 들으면서 내가 어떤 방식으로 구현하고자 했는지에 대해 확실하게 깨달았다. 나름 시험을 치면서 코드와 개념에 대해 깨달은 바가 있어서 유의미한 것 같다. 그리고 이번주는 티타임 시간을 가졌다.

 

이번주 티타임에서 뽑아먹을 키워드는

- 이해가 안 되면 외워라 (하지만 이것이 유일한 방법은 아니다, 본인의 방법을 찾으며 다른 시도를 해봐야함.)

- 프로그래밍 자체도 글을 배우는 것과 같다. 

- 쓰는 행위 자체가 의미가 있다 (무의식 영역에서 의식의 영역으로 꺼내서 글로 정제시키는 것 자체가 생각 정리에 도움이 된다.)

- 현 상태 파악하고자 한다면 자기가 최선을 다하고 있는지 물어보라 (최선을 다하고 있다고 생각하면 잘하고 있다.)

 

나름 하루하루를 잘 기록해보겠다고 TIL 느낌의 개발일지를 썼는데 파이썬 문법에 대한 내용이 좀 많은 것 같다. 여러 번 정리해보면서 딕셔너리와 셑(?)을 잘 응용할 수 있는 부분까지 노력해야할 것 같다. 같은 조였던 JM & GS오빠에게 한 주의 감사인사를 전합니다 :)

반응형