전체 글 74

[week03] SW사관학교 정글 3주차 회고

📷 회고 이번 주차 역시 알고리즘 주였고 키워드는 그래프, BFS. DFS, 위상정렬이었다. 모르는 개념들은 나동빈 형님의 강의를 듣고 정리하고, 문제를 풀어보는 식으로 진행했고 1시간정도 고민하다가 모르겠으면 답을 보고 이해하고, 다시 한번 풀어보는 식으로 진행했다. 3주차에 조원중에 한명은 알고리즘을 푸는걸 좋아하는 형이었다...! 알고리즘 문제를 풀기도 잘 풀고, 답을 보고 이해하고 그걸 흡수하는 속도도 엄청 빨라서 내가 일주일동안 걸려서 겨우 다 푼 문제들을 3일만에 다 풀어버리고 다른 사람들을 많이 도와줬다. 도움을 줄 때도 내가 어떤 부분에서 지금 모르고 있고 어떤걸 생각해야 할지 힌트도 적절하게 줘서 모든 과제를 끝내는데 도움을 많이 받았다. 3주차가 되니까 3기 동기(거의 운명공동체)들과도..

[week03] 백준 18405번 python 풀이

문제 https://www.acmicpc.net/problem/18405 18405번: 경쟁적 전염 첫째 줄에 자연수 N, K가 공백을 기준으로 구분되어 주어진다. (1 ≤ N ≤ 200, 1 ≤ K ≤ 1,000) 둘째 줄부터 N개의 줄에 걸쳐서 시험관의 정보가 주어진다. 각 행은 N개의 원소로 구성되며, 해당 위치 www.acmicpc.net 왜 틀렸을까? 시간초과로 엄청 고생했던 문제였다. 시간초과를 줄여보기 위해서 바이러스가 우리가 구하고자 하는 좌표칸 안에 증식되게 되면 변하지 않는 점을 이용해서 우리가 구하고자 하는 위치에 바이러스가 증식되는 순간 종료시키는 코드를 추가했다. 처음 짰던 코드에서는 바이러스의 종류별로(1~K 까지) 모두 확인하면서 코드를 짰었는데, 그 시간을 줄이기 위해서 전체..

[week02] WIL - 2주차 회고 및 배운내용 정리

📷 회고 2주차에는 조원 형의 추천으로 문제들의 속도, 메모리, 코드길이를 적어서 google sheet에 올렸다. 이 방법을 사용하니까 더 속도를 높이려면 어떻게 해야하는지 상대방의 코드를 참고할 수 있어서 좋았다. 각자의 코드는 github repository를 각자 파서 올리고 그 주소를 공유해주는 식으로 볼 수 있게 했다. 추이를 살펴보니 같은 문제에서 속도와 메모리는 반비례관계가 있는 듯 했다. 속도를 빠르게 하기 위해 여러 작업들을 추가할수록 메모리 사용이 늘어나는 것 같다. 각자 풀다가 이렇게 가다가는 다 못풀 것 같아서 회의를 통해 진도를 맞추고 1시간 고민, 못풀면 1시간 답보고 이해, 그래도 이해못하면 1시간동안 서로 알려주는 식으로 진행했다.(1-1-1) 1주차와 비슷하게 혼자 힘으로..

[week02] 백준 5904번 파이썬 풀이

왜 틀렸는지 메모리초과의 늪에서 한참동안 빠져있던 문제였다. 찾는 N의 범위가 1~10억 이기 때문에 배열에 Moo 수열을 만들어서 넣으면 메모리 초과가 뜬다. 그래서 m의 위치만 배열에 집어넣어도 마찬가지로 메모리 초과가 난다. 큰 수를 배열에 넣는 순간 메모리를 많이 잡아먹는 것을 처음부터 생각해서 배열에 넣는 방식말고 다른 방식을 사용했어야 했는데 그러지 못했다. 접근방법 배열에 수열, m의 위치를 넣지 못한다면 n이 Moo수열의 몇 번째 원소인지 어떻게 찾아낼 것인가? 길이를 사용하면 된다 !.! 문제에서 주어진 점화식은 S(K) = S(K-1) + (3+K) + S(K-1) 이고 이는 S(K) = 2*S(K-1) + K + 3으로 쓸 수 있다. 그런데 여기서 S 수열을 S 수열의 길이로만 바꿔주..

[week02] 정렬 + 이진탐색 vs 선형탐색(순차탐색) 시간복잡도

점근 표기법(Asymptotic Notation) 점근 표기법은 어떤 함수의 증가 양상을 다른 함수와의 비교로 표현하는 수론과 해석학의 방법이다. 우리는 이를 알고리즘의 복잡도를 단순화할때 쓴다. 어떻게? 가장 큰 영향을 주는 항만 계산하는 방식으로 단순화 시킨다. 점근적 표기법에는 대표적으로 3가지가 있다. 최상의 시나리오를 기준으로 하는 표기법: 오메가 표기법 평균적인 시나리오를 기준으로 하는 표기법: 세타 표기법 최악의 시나리오를 기준으로 하는 표기법: 빅오 표기법(Big-O Notaion) 우리가 주로 사용할 빅오 표기법은 실행 시간의 상한을 나타내며, 다른말로 하면 최악을 생각하는 경우이다. 컴퓨터공학자들은 일반적으로 최악을 상황을 고려하고 프로그래밍을 짜기 때문에 Big-O 표기법을 많이 쓴다..

[week01] WIL - 1주차 회고 및 배운내용 정리

📷 회고 정말 정신없었고, 개발실력에 관한 나의 무능함을 일깨워준 정글에서의 0주차(4일)가 지나가고 팀원들과 합심하여 주어진 문제를 해결하는 1주차가 다가왔다. 같은팀 조원들과 이제 막 친해진것 같은데 바로 헤어지게 되어서 아쉬운 감정이 컸다. 그러나 아쉬운 감정을 길게 가져갈 새도 없이 과제가 쏟아져나왔다. 1 ~ 4주차는 알고리즘 문제풀이 주차인데, 1주차의 키워드는 다음과 같다. [정수론, 배열, 문자열, 재귀함수, 정렬, 완전탐색, 시간복잡도] 기초적인 문제들이 많았기 때문에 시간은 넉넉할 것이라고 판단하고 각자 문제를 풀고 모르는 문제는 서로 도와주는 식으로 이번 주를 진행하기로 했다. 그러나 정말 큰 착각이었다. 주어진 시간 안에 모든 문제를 풀기조차 빠듯했고 시험 전날 밤이 되어서야 모두 ..

[week01] 찬찬히 나를 돌아보는 시간

🐾 지나온 과거에 대한 성찰 나의 과거를 한 문장으로 정리해 보면 "생각은 많으나 실행력이 그에 미치지 못함"으로 요약할 수 있을 것이다. 책이나 여러 매체를 통해 지식을 습득하고, 누군가의 조언을 듣고, 내 생각을 정리해 보는 시간은 많이 가졌다. 책을 많이 읽었지만 내 삶이 드라마틱하게 바뀌지는 않았고 그 이유는 너무나도 명확했다. 실행에 옮기지 않았기 때문이다. 내가 직접 경험해 보지 않은 간접경험들은 분명 나의 사고의 깊이를 더하는데 큰 도움이 되었겠지만 결국 내 인생은 바뀌지 않았다. 어느 순간 나는 행동하지 않으면서 남들을 평가만 하는 '비평가'의 포지션으로 가고 있다고 느껴졌다. 내가 실제로 행동하지 않고 지식만 습득하니까 내가 쌓아왔던 지식들이 남들을 더 잘 평가하는데 사용되어갔다. 내가 ..