본문 바로가기

전체 글

운영체제 1강 강의소개 이화여대 반효경 교수님의 강의를 듣고 운영체제를 공부해보려한다. http://www.kocw.net/home/cview.do?cid=3646706b4347ef09 운영체제 운영체제는 컴퓨터 하드웨어 바로 위에 설치되는 소프트웨어 계층으로서 모든 컴퓨터 시스템의 필수적인 부분이다. 본 강좌에서는 이와 같은 운영체제의 개념과 역할, 운영체제를 구성하는 각 www.kocw.net 운영체제란? 컴퓨터 하드웨어 바로 위에 설치되어 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층을 뜻한다 운영체제의 목표(2가지) 소프트웨어 및 사용자 대상: ->운영체제는 동시 사용자/프로그램들이 각각 독자적 컴퓨터에서 수행되는것 같은 환상을 제공(버츄얼 머신 같은것도) ->하드웨어를 직접 다루는 복잡한 부분을.. 더보기
코틀린 Collection 표준 라이브러리 사전 오랫만에 쓰는 글이다 사실 계속 글을썻는데 뭔가 썻던글들이 좀더 많이 공부해야하는 것이여서 글들이 죄다 미완성 상태로 남아있다.ㅜㅜ 언제 마무리하냐 어쨋든 최근 또 공부해야한다고 느낀부분에 대해서 정리하고 넘어가려한다. 최근 우테코 프리코스,이펙티브 코틀린 읽기 등등을 하며 코틀린에 진하게 노출될 상황이 많았다. 특히 이펙티브 코틀린 책이 너무 좋다. 정말 이펙티브 코틀린을 빠르게 읽어보길 권한다. 어쨋든 코틀린의 적절한 사용을 강조하는 책들을 본다면 두가지를 많이 강조한다. 1. 쓰잘데기없이 기능구현 하지말고 표준라이브러리(stdlib)에 있는거 가져다 써라 2. 컬렉션을 함수형으로 잘 다룬다면 예쁘고 가독성 좋게 만들수있다. -> 결론적으로 함수에 넣어서 계속되는 임시변수에 담을것이 아니라 함수를 쭉.. 더보기
1장 - 아이템 1 : 가변성을 제한하라 1장 안정성 우선 장의 시작이니 1장의 큰 범주를 이야기해보자 1장에서는 안정성에 대하여 다룬다고 한다 안정성이란 무엇인가? -> 크래시가 잘안나는 즉 오류가 잘안나는 코드이다. 근데 코틀린은 언어적 차원에서 안정성이 아주 높다고 한다. 그렇다고 그냥 코틀린을 쓴다고 안정성이 높은것이 아니라 언어적으로 지원을 하니 개발자가 그것을 사용할줄 알아야 한다. 그래서 코틀린이 안정성을 위해 제공하는 기능들을 알아보고 사용법을 알아본다 -> 오류가 덜 발생하는 코드를 만들자 예전에 네이버 웹툰 면접을 볼때 주니어와 시니어의 개발의 차이가 그냥 무조건 try catch 로 오류처리하는 것이 아닌 try catch 를 줄이며 오류처리를 하는것에서 확연히 다르다고 했는데 이런 부분으로 오류가 애초에 안일어나게 막는것 .. 더보기
재귀 부터 어떻게좀 해보자 제발 재귀 진짜 난 왤케 재귀가 어렵지? 원래 재귀가 더 쉽고 간단하다는데 진짜 열받네 아오아오아오. 재귀 당연히 그냥 지가 지부르면 재귀이다. 재귀는 패턴이 있다고 한다. 그냥 인자로 들어오는거 변화시켜서 다시 본인함수를 호출해주는것이다. 예시1 def function(인자): if 인자 > 일정값: #인자가 일정 값 이상이면 return function(인자 -1) # 인자를 변화시킴 else: return 특정값 예시2 def function(인자): if 인자 더보기
DFS BFS 컨닝페이퍼 bfs를 처음으로 접하고 bfs를 쭉풀고 아직 dfs를 많이 안풀어서그런지 bfs가 훨씬 편하고 익숙하다. 하지만 알고리즘왕 문명주 말로는 dfs를 꼭 이용해야 풀수있는 문제들이 있다고한다 억울하다 그래도 왠만해서 둘다 풀리는거 같긴하다. 일단 둘의 팁은 bfs든 dfs든 그 원리 생각해서 문제마다 맞게 하나하나 꺼내서 넣고 이런거 적용하면되는데 시간복잡도 너무 생각안하면 문제생길수있다 다른조건에서 막 3중for문 돌리고 이러면 시간초과 걍나는거다 그리고 조건을 매우 잘봐야한다 한번도 bfs던 dfs던 안돌고 끝나는것도있고 자연스럽게 큐에 뭐가 안들어가서 끝나는경우도 있으니 끝나고 난다음에 조건을 판단해보는것도 생각하고 그리고 일수는 리스트로 묶어서 그걸 하루치로 큐에 넣는것도 있다 어쨋든 잘응용해야 할.. 더보기
dfs 제대로 정리 단순 탐색의 방식만 달라질뿐이지 어짜피 모든 정점을 탐색하는것은 같다. 한마리도 bfs는 need_visited 큐와 visited큐가 있었는데 그것중 need visited 를 스택으로 바꿔주면 되는것이다. 동작 방식은 bfs랑 유사하다. 원래 큐에서 빼는 방식이 스택으로 뺴는 방식으로 바뀌었을뿐 그리고 중복검사도 visited 큐에 담을떄 해주는것도 똑같다. 스택에 넣을떄도 들어가있는 즉 연결되어있는 방향 어디로 탐색할지 상관없다 그냥 탐색하면된다. 즉 그냥 스택에 물려있는 노드들 넣어주면됨 그냥 진짜 큐가 스택으로 바뀐거 빼고는 다른거 하나 없음 바로 코드 구현으로 해보자. dfs는 스택 쓴다는걸 알면되는데 스택 자체가 그냥 원래 컴퓨터 구조상 스택으로 돌아가기 떄문에 그냥 재귀만들어서 쭉열어주면 .. 더보기
BFS 제대로 정리 BFS: 너비우선 탐색 그래프를 맹목적으로 탐색하는것이다 시간복잡도는 노드수:V 간선수: E 이떄시간복잡도는 O(V+E) 이다. ->단순 탐색방법으로 문제에 어떻게 적용하는가가 중요하다. 사용하는 문제유형 그래프의 모든 정점을 방문할시 최단거리 문제의 경우 BFS -> 최단거리 DFS 쓰면 최단거리 아닐수있음 BFS가 DFS보다 더빠름 대체적으로 BFS가 더 복잡함 일단 근데 그래프 자료구조 뭐로 쓰는데? ->뭐 어쩌구 저꺼구 제끼고 파이썬에서는 걍 딕셔너리 자료형에 리스트를 넣어서 구현한다. -> 인접 리스트 기반 그래프 key value A B C B A D C A G H I D B E F E D F D G C H C I C J J I 요렇게 하면됨 key 값이 각 노드들 그리고 그 value 값으로.. 더보기
이진탐색 컨닝페이퍼 이진탐색 일단 기본개념으로 lower bound,upper bound arr = [1, 2, 3, 3, 5, 6, 6, 8, 9, 10] left, right = 0, 9 target = 8 answer = -1 while left = target: #요기 >=를 >로 바꾸면 upper bound answer = mid right = mid - 1 else: left = mid + 1 print(answer) # 7 lower bound 코드다 -> >= 를 >로 바꾸면 upper bound 이분탐색 쓸거같은 냄새나는거 일단 이분탐색 그냥 뭐 큰숫자 찾는 이런 개념이아니라 그냥 탐색할때 대체적으로 많이 적용할수있는거같음 -> 이런거는 근데 아직까지 쉽게 적용을 못해봄 근데 이분탐색 자체가 시간복잡도가 O.. 더보기