블로그

빠타박스

[인프런 워밍업 클럽 2기 - CS] 지난 3주간의 여정 속에서 - 완주 후기

처음 이걸 왜 들었을까?이 과정을 듣기 2일쯤 됬던가. 벤처 게임회사에 면접을 보았다.그 회사의 면접은 그냥 말아먹었다.그 이유는 역시 기초 지식이다.  공부한지 어연 5년이 다된간다. 이쯤되면 게임개발이라는 것을 포기할만도 했다...어떻게 해야할까 하는 찰나에 인프런에 들어와 여느때 처럼 그냥 공부를 하고자 한숨을 내쉬며 들어왔는데바로 보이는... CS 이게 무슨일이지 하면서 한번 볼까? 무료라고?아.. 근데 아니였다... 기본적으로 할인을 해주나 로드맵에 있는 수강내역을 구매해야만 참가가 가능했다.나는 좀 아쉬웠다.. 가뜩이나 백수 5년째 거금을 들이기가 선뜻 겁이 났다... 그렇게 많은 돈은 아닐 수 있었지만... 나에게는 식비와 공과금을 충당해야만 하는 비용이였기 때문이다.하지만 면접에서 탈탈 털린 나로써는 CS지식이 시급했다... 나에겐 여러 장애물이 있었다...자격증 시험이였다... 항상 내 발목을 묶는 장애물이였다.이 과정을 진행하면서 실기일이 얼마 남지 않은 상태였다... 그럼에도 불구하고 CS 지식을 터득하자. 하지만 가볍게 보고 다음에 다시 보도록 하자는 마인드였다.(내가 반복하는 걸 싫어하다 보니까... 이게 참 문제다... )그렇게 그냥 열심히 했다...그냥 할 수 있는 만큼...  공부는 어떻게 해야 하죠? 난 솔직히 아직도 개발 공부란 것을 어떻게 해야할 지 모르겠다...그냥 받아적고 천천히 느리게 한다. 하나 볼때 최대한 이해하려고 다 적는다.하지만 남는게 별로 없다...반복학습이 생명인 것을 알겠다..ADHD를 겪고 있던 나로써 반복학습은 정말 지겨웠다.. 그래도 반드시 해내자 라는 마인드로 임했다...그렇게 공부한 것들을 필기하고 요약하려고 하였지만 쉽지 않았고, 최대한 가볍게 이해하려고 했다. 가장 어려웠던건 알고리즘 부분이였다... javascript로 하다보니 C++로 변환하려니까. 뭔가 비슷은 한데 헷갈리는 부분이 많았다... 안되던 것도 있었고,,,... 쉽지 않았다... 정처기 얼마 남지 않았는데 계속 붙들고 있는 경우도 발생했다그게 1주차 때이다. 그냥 무작정 하라는 대로 하였다. 최대한 깊어보이면서 간결하게다른 사람들이 쓴 것도 보았으면 좋았겠지만. 쓰고 바로 정보처리기사 공부를 해야만 했다. 18일 금요일 모든 과정이 종료 되었고, 이제 수료식만을 남겨둔채 나는 정보처리기사 공부를 집중했다.10월 20일 일요일 정보처리기사 D-Day...,..실기는 매우 어려웠었고 조졌다.... 그렇게 돌아와 낙심에 빠졌다... 그리 며칠 가지 않아서하.. CS 관련해서 심화적으로 봐야만 한다는 것을 어떻게 할까 하다가.최대한 쿠폰을 사용해서.. 보고 싶은데 해서 결국 구매를 강행했다..아직 보진 않았다. 왜냐하면 이전꺼도 다시한번 봐야만한다.다시 반복학습을 해야만 하니까. 이 과정이 끝나고 정말 운수 좋은날인가... 아는 분을 통해 일자리를 얻게 되었다...처음에는 어리둥절했다... 뭔지도 모르고 뭘 시킬지도 모르는데... 게임개발만 3년 정도를 팠다....언리얼엔진....갔더니 대표님이 언리얼엔진에 대한 이전 문제 때문에 나를 궁금해 하셨고 그일을 나에게 맡기셨다..부담스럽기도 하고 기회다 하며 재밌겠다 하며 그 기회를 붙잡았다...11월 4일 부로 출근하게 되었다. 그래서 언리얼엔진 심화 및 기초에 대한 내용을 공부하고 있어서 해당 자료구조를 못보고 있었다.  수료식그렇게 11월 1일(금)원래대로면 오프라인에 참석해야 하나.. 나의 직업군인시절 후유증으로 인해...갑자기 도져서 가지 못한다고 말하게 되었다...시작된 워밍업 클럽 수료식 과정중 코치님 감자 강사님께서 나오셔서 질의 응답 시간을 가졌다.유익한 시간이였고 좋은 정보도 얻었다. 추천 받은 책 : CODE (컴퓨터 구조에 대한 내용 밑바닥?)https://elfmfl.tistory.com/33 (펌 정보) 난 아직도 많은 공부를 해야만한다는 것을 느꼈다. 저곳에 모인 사람들 중에 분명 나보다더 대단한 사람도있고젊고 파릇파릇한 분들도 있을테고 여럿 사람들이 모였었을 것이다.부러웠다.. 저 자리에 위치할 수 있어서...하지만 또 나름 나의 시간을 아끼며 공부를 했다. 그렇게 질의응답시간이 끝나고 수료식의 대망의 수상 발표이다. 응?뭐지.. 적어도 26~30명 정도 CS 과정을 들었던거 같은데.. 우수러너에 뽑히게 되었다....다들 수상을 하고 있을 때 그저 축하해주기 위해서 남아있었는데.내가 수상하게 될 줄 은 꿈에도 몰랐다. 그래서 이 감사를 어떻게 해야 할지 바로 누군가에게 자랑을 했다. ㅎㅎ;;감사한 하루였다. 앞으로 어떤 과정이 또 생길지 모르겠다.하지만 이제 일을 시작했고, 이 일을 완벽히 하기 위해 더더욱 기초가 다져져야 한다.이 과정과 고난의 길 위를 즐기자. 기쁨으로 하루를 살아가자 이 과정을 겪을 수 있어서 감사합니다.인프런을 통해 많은 청년들이 새 꿈을 이룰 수 있게 해줬으면 좋겠다. " 모든 것의 가장 빠른 배움은 부딪히는 것이다. 그게 밑바닥이 되었든.가장 좋은것은 프로젝트를 하고 현업처럼 부딪히는 것 "     이제 다가올 2025년도를 위해인프런 공부를 하며 여러 사건과 여러 정치적인 이슈들이 있었다.우리는 내일을 위해 무언가를 지켜야 하고 싸워야 하는 경우가 생길 것이다.그저 지금 편안하게 우리가 공부할 수 있는 것은 누군가 희생되고 있음을 깨달아야 한다. "모든 일에는 당연한 것이 없다" 누군가의 배품, 누군가의 선함, 누군가의 악행,모든 것에는 이유가 있다. 포괄적차별금지법북한군파병이스라엘과 하마스 및 헤즈볼라윤모의 자금 횡령 및 국가비상금 빼돌림 여러 이슈들이 존재 한다. 우리는 공부하면서 깨어있어야 한다. 우리 미래가 결정되고우리 후대의 미래가 결정된다.해외 부자들 CEO들이 우리나라의 급격한 인구가 줄어드는 것을 바라보고 있다..대책이 없다... 그저 장막 안에서 보호를 받으면서 공부를 하는것도 그렇지만. 나라가 없어지면..공부도 무의미 하다... 깨어있는 공부를 하자. 부디 25년도에는 많은 것들이 청렴해지고 나아지길 바란다. 끝없이 성장하는 개발자가 되고생존하자. 버티며 끝까지 임하자 최선을 다하자. 내일 죽는한이 있더라도 자신의 위치에서 최선을다하자

알고리즘 · 자료구조인프런인프런워밍업클럽스터디2기자료구조알고리즘감자워밍업클럽

하얀종이개발자

인프런 워밍업 클럽 2기 - CS 전공지식 스터디 3주차 마지막 발자국

운영체제 3주차 학습 요약 가상메모리컴퓨터의 물리적 메모리의 크기를 확장하기 위해 사용되는 기술운영체제가 각 프로세스마다 독립적인 메모리공간을 할당할 수 있게 해줌이때문에 프로그래머는 프로그램이 메모리 어디에 위치하는지 신경쓰지 않고, 0부터 시작된다고 생각하고 프로그래밍 함동적주소변환 (DAT)메모리관리자가 가상메모리의 논리주소를 물리주소로 변환하는 것을 말함세그멘테이션 분할 방식에서 논리 주소를 물리주소로 변환메모리관리자는 CPU에서 받은 논리주소를 세그멘테이션 테이블을 이용하여 물리주소를 찾음페이징 분할 방식에서 논리 주소를 물리주소로 변환메모리관리자는 CPU에서 받은 논리주소를 페이지 테이블을 이용하여 물리주소를 찾음페이지드 세그멘테이션 분할 방식에서 논리 주소를 물리주소로 변환세그멘테이션 테이블의 속성값으로 페이지 테이블의 인덱스를 추가할 수 있게하여 세그멘테이션, 페이지 테이블을 모두 이용해서 물리주소를 찾음가상메모리는 세그멘테이션으로 분할되어 있고, 물리메모리는 페이징으로 분할되어 있어 각 분할방식의 장점을 취할 수 있게 함메모리 접근권한세그멘테이션 테이블에 메모리의 특정번지에 권한을 부여하는 속성을 추가하여, 메모리 접근시 권한을 검사할 수 있음디멘드 페이징 정책조만간 필요할 것 같은 데이터를 메모리에 가져오고 쓰이지 않을 것 같은 데이터는 스왑영역으로 보내는 정책필요한 데이터를 언제 메모리로 가져올지를 결정하는 것페이지 테이블 엔트리접근비트, 변경비트, 유효비트, 권한비트 (프레임번호만 있는게 아님)페이지 폴트프로세스가 가상메모리에 접근요청했을때 물리메모리에 데이터가 없을때 발생하는 인터럽트페이지 폴트가 발생하면 보조저장장치의 스왑영역에 접근하여 스왑영역에 있는 데이터를 메모리에 올리는 작업을 함페이지 교체정책스왑영역에서 데이터를 찾아 메모리에 올리려고 했는데, 이미 메모리가 가득찼을때 조회할 데이터를 메모리에 추가하기위해 데이터를 남기거나 스왑영역으로 보내는 정책무작위, FIFO, Optimum, LRU, Clock Algorithm, Enhanced Clock Algorithm스레싱과 워킹셋스레싱제한된 물리 메모리에 프로그램을 많이 올려 스왑 영역에 데이터가 많이 저장되고 Page Fault가 자주 발생하게 되면 CPU 사용률이 떨어짐. 스케줄러에 의해 운영체제는 CPU 사용률을 올리기 위해 더 많은 프로세스를 메모리에 올리게 되고 이를 반복하게 되면 CPU 사용률이 0에 가깝게 떨어지는데 이를 스레싱이라고 함워킹셋현재 메모리에 올라온 페이지는 다시 사용할 확률이 높기에 하나의 세트로 묶어서 메모리에 올리는데 이를 워킹셋이라고 함입출력장치주변장치(I/O 디바이스, 저장장치)들은 메인보드에 있는 버스로 연결되어 있음각 하드웨어에 맞게 외부 인터페이스가 존재캐릭터 디바이스, 블록디바이스 입출력 제어기는 두 개의 채널, 시스템 버스와 입출력 버스로 구분파일과 파일시스템운영체제가 파일을 관리하기 위한 파일 관리자파일을 관리하는 하드디스크나 Flash Memory(SSD)는 블록 디바이스, 파일 시스템은 전송 단위는 블록이지만, 사용자는 바이트 단위로 파일에 접근이 가능해야 함, 파일 관리자가 이를 중간에서 관리파일의 종류순차파일구조, 직접파일구조, 인덱스파일구조디렉토리관련있는 파일을 모아둘 수 있도록 하는 장치알고리즘 & 자료구조 3주차 학습 요약 삽입 정렬 (Insertion Sort)정렬되지 않은 영역에서 데이터를 하나씩 꺼내서 정렬된 영역 내 적절한 위치에 "삽입"해서 정렬하는 알고리즘삽입하려는 데이터를 정렬된 영역의 원소를 역순으로 순회하면서 비교O(n²)장점 : 작은 데이터나 거의 정렬된 데이터에 대해 매우 효율적단점 : 속도가 느려서 대규모 데이터에 비효율적 병합 정렬 (Merge Sort)정렬하려고 하는 배열을 잘게 쪼갠다음, 순서에 맞게 재배열하는 알고리즘 (재귀)O(n log n) 장점 : 속도가 빠르며 대규모 데이터에서도 일정한 성능을 보임 단점 : 추가 메모리 공간이 필요하며, 메모리 효율이 떨어질 수 있음퀵 정렬 (Quick Sort)배열의 숫자중 하나를 피벗으로 설정하고, 피벗의 왼쪽에는 작은값, 피벗의 오른쪽에는 큰값을 정렬하는 알고리즘분할시 왼쪽과 오른쪽의 포인트가 교차하면 피벗과 오른쪽 포인트의 값과 교환하여 피벗값을 정렬해나감평균 O(n log n), 최악 O(n²) 장점 : 평균적으로 매우 빠르고, 메모리 사용이 적음 단점 : 피벗 선택에 따라 성능이 달라지며, 최악의 경우 속도가 느려질 수 있음 (그러나 최악이 되는 경우는 거의 없음)동적프로그래밍메모이제이션계산 결과를 따로 기억해서 여러 번 중복 계산하지 않도록 하는 기법하향식 계산 방식으로 활용타뷸레이션계산에 필요한 모든 값을 전부 계산 후 테이블에 저장하는 기법상향식 계산 방식으로 활용 회고스터디의 마지막 주차가 되었네요. 나름 정리도 하고 CS전공지식 스터디 내부에서 다른분들이랑 모여 발표 스터디도 하면서 열심히 학습하면서 많이 배운시간이 었던거 같아요. 특히나 알고리즘을 직접 구현해보면서 각 알고리즘의 장.단점을 외우지 않아도 조금만 생각해보면 장.단점을 도출할 수 있게 되어서 좋았어요.스터디 발표 & 정리 자료 캡쳐빠르게 끝나 아쉬움반 후련함반이 있지만, 계속 복습하고 부족한 부분 채워나가면서 열심히 해나가겠습니다.많이 배웠습니다. 즐거웠어요.

백엔드CS전공지식그림으로쉽게배우는자료구조와알고리즘그림으로쉽게배우는운영체제인프런워밍업클럽2기감자

빠타박스

[(Daily 빠타박스)인프런 워밍업 클럽 2기] - CS 전공지식을 시작하는 글_1일차

인프런 워밍업 클럽 CS얼마전 본 면접에 나는 그냥 딱히 신경 쓰지 않았다. 나의 실력이 이정도구나..이런 질문에 이런 것 밖에 답변을 하지 못하는구나. 너무 준비되지 못했고 기초가 부족하다 느꼈다... 그러다 우연치 않게 보게된 워밍업 클럽 처음엔 무료인줄 알았다..그러나 스터디 그룹에 초대되고 그런 과정이 무료라는 것이지 절대 세상에 무료라는 것은 없다. 그냥 40% 할인권을 주었고그것으로 구매하여 저렴하게 강의를 수강할 수 있었다. 감자라는 강의자 분은 정말 퀄리티 좋은 강의를 올리시고 계신다는 것을 일단 동영상에 노력이 어마어마 하게 들어갔음을 알 수 있었다. 감자강의자님 로드맵 CS일단 강의 자체는 좋아보였고, 리뷰도 정말 좋게 쓰여져 있다. 솔직히 믿을만 한가. 싶기도 했지만. 나는 좀 인강 스타일이 까다롭게 잘 안맞아서... 이 30대에 듣는 인강을 신중히 고르는 편이였다. 리뷰 내용도 일단 보고 고민을 많이했다. 널널한개발자 님의 강의를 볼지 이것을 할 지 그러나 그냥 해보자 싶었다.강의 커리큘럼을 비교해 보면서 들어오게 되었고,11월 1일 까지 마감이라. 딱 마침 내가 다시 학원에 가게 될 시기랑 겹치지 않아서.(갈지 안갈지 지금 쓰는 시점에서 아직 정하지는 않았다만..) 그렇게 초대된 디스코드를 통해서 OT도 진행하였고, 확실히 제대로 진행하는 스터디 클럽인 만큼 신중히 잘 하는 것 같았다.시간표도 주어지고 준비가 되어있는 듯 했다. 약 한달간의 커리큘럼과정이였으나.이것이 어쨋든 자기주도학습의 일환이다. 우리가 들어야 한다. 정보를 제공해주었으니. 그래서 시작해본다.내 스스로의 위치에서 발전할 수 있기를 어디서나 중요한건 복습이다. 복습되지 않으면 쉽지 않을 수 있다.내가 간과하는 것이 그런것이다. 반복학습을 싫어하기에. 힘들어한다.하지만 해야하만 한다... 한번 진행해보자... 9월 30일을 기점으로 1일차가 시작되고 그것을 해내기 위해 글을 써본다.또한 정보처리기사 실기가 잡혀있는데. 병행해서 해야만한다.

컴퓨터 구조인프런워밍업클럽스터디모임감자빠타박스언리얼엔진CS지식CS게임개발자

minme9055

[인프런 워밍업 클럽 2기 CS] 3주차 발자국

운영체제세그멘테이션(배치정책)메모리를 논리적 단위(세그먼트)로 분할각 세그먼트는 다양한 크기 가능외부 단편화 문제 발생 가능페이징(배치정책)메모리를 동일한 크기의 페이지로 분할물리 메모리와 가상 메모리 간 매핑내부 단편화 발생 가능, 외부 단편화 해결페이지드 세그멘테이션(배치정책)세그멘테이션과 페이징 결합세그먼트를 페이지 단위로 나눔유연성과 효율성 향상디맨드 페이징(가져오기 정책)필요한 페이지만 메모리에 로드페이지 부재 시 디스크에서 가져옴메모리 사용 효율성 증가페이지 교체정책FIFO, LRU, LFU 등 다양한 알고리즘새 페이지 로드 시 어떤 페이지를 교체할지 결정페이지 부재율 최소화 목표스레싱과 워킹셋스레싱: 과도한 페이지 교체로 성능 저하워킹셋: 프로세스가 자주 참조하는 페이지 집합워킹셋 관리로 스레싱 방지주변장치(I/O 디바이스, 저장장치)CPU, 메모리 외 하드웨어 장치입력, 출력, 저장 기능 수행인터럽트 기반 동작마우스/키보드사용자 입력 장치이벤트 기반 동작인터럽트 처리 필요하드디스크/Flash Memory(SSD)하드디스크: 기계식, 대용량, 저렴SSD: 전자식, 고속, 고가비휘발성 저장 장치파일과 파일시스템파일: 관련 데이터의 논리적 집합파일시스템: 파일 저장, 조직, 검색 관리메타데이터 관리 포함디렉토리파일들의 논리적 컨테이너계층적 구조 (트리 구조)파일 검색, 그룹화 용이파일과 디스크파일 할당 방식: 연속, 연결, 인덱스 할당빈 공간 관리디스크 스케줄링 알고리즘 자료구조와 알고리즘정렬 - 삽입정렬원리: 정렬된 부분에 새 원소를 적절한 위치에 삽입시간 복잡도: 평균 및 최악 O(n^2), 최선 O(n)특징: 작은 데이터셋에 효율적, 부분 정렬된 배열에 유리안정적 정렬 알고리즘정렬 - 병합정렬원리: 분할 정복 방식, 작은 부분으로 나누고 병합하며 정렬시간 복잡도: 항상 O(n log n)특징: 대규모 데이터 정렬에 효율적, 추가 메모리 필요안정적 정렬 알고리즘정렬 - 퀵정렬원리: 피벗 선택 후 분할 정복 방식으로 정렬시간 복잡도: 평균 O(n log n), 최악 O(n^2)특징: 실제 구현에서 매우 빠름, 불안정 정렬피벗 선택 방법이 성능에 큰 영향동적 프로그래밍 - 메모이제이션원리: 계산 결과를 저장하고 재사용 (캐싱)특징: 주로 하향식(top-down) 접근법장점: 중복 계산 방지로 효율성 향상적용: 피보나치 수열, 최장 공통 부분 수열 등동적 프로그래밍 - 타뷸레이션원리: 작은 부분 문제부터 해결하며 표를 채움특징: 상향식(bottom-up) 접근법장점: 일반적으로 메모리 사용량이 적음적용: 냅색 문제, 최단 경로 문제 등3주차 후기지난 주차보다는 익숙한 단어들이 많이 보였다. 그래서 조금 가벼운 마음으로 시작했다가 어김없이 혼돈으로 접어드는 루트의 반복이었던 주였다. 언제쯤 이 단어와 개념과 친구 먹을 수 있을까 😂운영체제에서는 가상 메모리에 대해 배우면서 세그멘테이션과 페이징의 개념을 잡고, 메모리 관리 기법의 발전 과정을 따라 공부해 보았다. 입출력 장치와 파일 시스템에 대해 공부하면서는 하드웨어와 소프트웨어의 상호작용을 중점으로 공부했는데, SSD와 하드디스크에 대한 내용을 공부할 때는 노트북 살 때의 경험을 떠올리면서 들으니 다른 파트보다 조금 더 재밌게 들을 수 있었던 것 같다.알고리즘에서는 다양한 정렬 방법들과 동적 프로그래밍에 대해 배웠다. 정렬에 대해 공부할 때는 각각의 장단점을 비교하면서 언제 적합하게 사용할 수 있을지를 주요 포인트로 공부했다. 이미 이전에도 몇 번 봤던 개념이라 막 어렵다는 느낌은 없었다. 그런데 동적 프로그래밍이 개인적으로 좀 어려웠던 것 같다. 동적인건 언제나 어렵다, 다 정적이었으면 좋겠다 라고 궁시렁 거리면서 공부했다. 그래도 감자쌤과 함께 찬찬히 공부하니 완벽하게는 아니어도 어렴풋이 개념은 잡을 수 있었던 것 같다. 인프런 워밍업 클럽 2기 후기한 번도 공부해보지 않은 CS를 공부해보겠다고 시작한 워밍업 클럽은 생각보다 빠르게 지나갔다. 회사 일이랑 이직 준비랑 다른 스터디에 엄청 치이면서도 워밍업 클럽을 포기하지 않은 건, 하루에 수행할 수 있는 적합한 학습량과 감자쌤의 친절나긋한 설명 덕분이 아닐까 싶다. 그리고 워밍업 클럽을 같이 진행하면서 열심히 하시는 다른 분들의 모습에도 많은 자극을 받았던 것 같다. 3주 동안 감자쌤과 함께 배운 내용들을 완벽하게 이해했다고 할 수는 없지만, 전반적인 내용을 파악했고 어느 부분이 어려운지도 알았으니 앞으로 공부하면서 부족한 부분들을 더 채워나가야겠다.

알고리즘 · 자료구조인프런인프런워밍업클립CS운영체제자료구조알고리즘감자3주차

minme9055

[인프런 워밍업 클럽 2기 CS] 3주차 미션

운영체제1. 메모리의 종류는 어떤것들이 있나요? 각 메모리의 특징도 함께 적어주세요.RAM: 빠른 읽기/쓰기가 가능하지만, 전원이 꺼지면 내용이 사라집니다.ROM: 읽기 전용이며, 내용이 영구적으로 보존됩니다.캐시: CPU와 가까이 있어 매우 빠르지만, 비용이 높습니다.가상 메모리: 하드디스크 일부를 RAM처럼 사용합니다. 속도는 느리지만 큰 용량을 사용할 수 있습니다.2. 사용자 프로세스가 메모리의 운영체제 영역에 침범하지 못하도록 만든 레지스터는 어떤 레지스터일까요?경계 레지스터(Boundary Register)입니다. 이것이 없으면 프로그램들이 운영체제 영역을 무단으로 접근할 수 있어 문제가 생길 수 있습니다.3. 메모리 할당 방식에서 가변 분할 방식과 고정 분할 방식의 장단점은 뭔가요?고정 분할: 설정과 관리가 쉽습니다. 하지만 메모리 낭비가 심할 수 있습니다.가변 분할: 메모리를 효율적으로 사용할 수 있습니다. 다만 관리가 조금 복잡할 수 있습니다.4. CPU 사용률을 올리기 위해 멀티프로그래밍을 올렸지만 스왑이 더 많이 이루어져 CPU 사용률이 0%에 가까워 지는 것을 뭐라고 할까요?스래싱(Thrashing)이라고 합니다. 시스템이 너무 바빠서 정작 실제 작업은 못 하는 상황을 말합니다.5. HDD나 SSD는 컴퓨터를 실행시키는데 꼭 필요한 걸까요? 이유를 함께 적어주세요.네, 필요합니다. 전원이 꺼져도 데이터를 유지해야 하기 때문입니다. 하지만 RAM만으로 운영되는 특수한 시스템도 있긴 합니다. 이를 "RAM 디스크" 또는 "메모리 전용 시스템"이라고 부릅니다. 주로 아주 빠른 처리 속도가 필요하거나, 데이터의 영구 저장이 필요 없는 특수한 경우에 사용됩니다.6. 파일을 삭제해도 포렌식으로 파일을 복구할 수 있는 이유가 무엇일까요?파일을 삭제해도 실제 데이터는 지워지지 않고, 그 공간을 재사용 가능하다고 표시만 합니다. 그래서 덮어쓰기 전이라면 복구가 가능합니다.자료구조와 알고리즘1. 지금까지 배운 5개의 정렬 알고리즘의 장단점과 시간 복잡도를 적어주세요.버블 정렬: 구현이 쉽지만, 속도가 느립니다 (O(n^2))선택 정렬: 구현이 쉽지만, 역시 속도가 느립니다 (O(n^2))삽입 정렬: 작은 데이터에 효과적이며, 평균/최악의 경우 O(n^2)입니다병합 정렬: 안정적이고 항상 O(n log n)의 성능을 보이지만, 추가 메모리가 필요합니다퀵 정렬: 평균적으로 빠르며 O(n log n), 최악의 경우 O(n^2)의 성능을 보입니다2. 메모리가 부족한 시스템에서 어떤 문제를 해결하는데 재귀로 쉽게 구현이 가능할 것 같습니다. 여러분이라면 메모이제이션과 타뷸레이션 중 어떤 걸 이용하실 건가요? 이유를 함께 적어주세요.타뷸레이션을 사용하는 것이 좋습니다. 메모이제이션은 재귀 호출을 많이 하기 때문에 스택 오버플로우가 발생할 수 있어요. 반면 타뷸레이션은 반복문으로 해결하기 때문에 메모리를 덜 사용합니다.

알고리즘 · 자료구조인프런인프런워밍업클럽CS운영체제자료구조알고리즘감자3주차

하얀종이개발자

인프런 워밍업 클럽 2기 - CS전공지식 스터디 미션 03 입니다.

CS전공지식 미션 2운영체제메모리의 종류는 어떤것들이 있나요? 각 메모리의 특징도 함께 적어주세요.레지스터CPU 내부에 있는 가장 빠른 메모리로 CPU가 계산하기위해 데이터를 임시로 저장CPU가 직접 접근할 수 있으며, 64bit 32bit CPU라는 말도 CPU의 연산단위이면서 레지스터의 크기를 나타냄캐시L1, L2, L3 캐시등이 있으면 CPU와 메모리 사이의 속도차이를 줄이기 위해 임시로 데이터를 저장하는 공간메인 메모리일반적으로 RAM을 의미하며 포노이만 구조의 CPU가 연산하기위해 프로세스를 올리는 공간전원이 꺼지면 데이터도 사라지는 휘발성 메모리임보조저장장치SSD, HDD 등으로 데이터를 영구적으로 저장할 수 있음, 메모리보다 속도가 느림전원이 꺼져도 데이터가 남아있는 비휘발성 메모리임 사용자 프로세스가 메모리의 운영체제 영역에 침범하지 못하도록 만든 레지스터는 어떤 레지스터일까요?경계레지스터 : CPU내부에 존재해서 맨 앞에 저장하고 있는 운영체제 영역의 최대 범위를 기록하고 있어, 침범하지 못하게 함, 만약 경계 레지스터의 값을 넘긴 프로세스가 있으면 해당 프로세스를 종료시킴메모리 할당 방식에서 가변 분할 방식과 고정 분할 방식의 장단점은 뭔가요?가변분할방식은 프로세스의 크기에 맞춰 메모리를 분할하는 방식으로 프로세스의 영역별로 메모리를 분할 할 수 있어, 메모리 접근권한이나 메모리 공유를 할 수 있음, 그러나 외부단편화가 발생하여 메모리낭비가 생길 수 있음 고정분할방식은 고정된 크기로 메모리를 분할 하는 방식으로 가변분할방식의 외부단편화를 제거할 수 있음, 그러나 고정된 크기에 프로세스를 나눠서 할당하기 때문에 내부 단편화가 발생할 수 있고, 프로세스 영역별로 나눌수 없어 메모리 접근권한이나 공유하는데 어려움이 있음CPU 사용률을 올리기 위해 멀티프로그래밍을 올렸지만 스왑이 더 많이 이루어져 CPU 사용률이 0%에 가까워 지는 것을 뭐라고 할까요?스레싱많은 프로그램을 메모리에 올리면 스왑이 빈번하게 일어날 수 있음이때 CPU가 실제 작업을 처리하지 못하고 스왑 작업에만 몰두하게 되어 CPU를 사용하지 못하는 현상을 말함HDD나 SSD는 컴퓨터를 실행시키는데 꼭 필요한 걸까요?꼭 필요하지는 않음컴퓨터가 실행되기 위해서는 RAM이 필요하지만, HDD나 SSD는 데이터의 영구적 저장을 위한 보조 장치임만약 시스템이 네트워크 기반 부팅을 사용하거나 RAM 디스크를 활용하는 경우, HDD나 SSD 없이도 컴퓨터를 실행할 수 있음. 다만 RAM은 전원이 꺼지면 데이터가 모두 사라지기 때문에 일반적으로는 운영체제를 포함한 데이터를 저장하기 위해 HDD나 SSD가 필요파일을 삭제해도 포렌식으로 파일을 복구할 수 있는 이유가 무엇일까요?파일을 삭제하더라도 실제로 데이터는 즉시 삭제되지 않고, 파일 시스템에서 해당 파일의 참조만 제거됨실제 데이터는 디스크에 그대로 남아 있기 때문에 포렌식 도구를 이용해 복구할 수 있음.완전한 삭제를 위해서는 데이터를 덮어쓰는 과정을 거쳐야 함자료구조와 알고리즘지금까지 배운 5개의 정렬 알고리즘의 장단점과 시간 복잡도를 적어주세요.버블 정렬 (Bubble Sort)O(n²)장점 : 단순한 구조로 이해 & 구현이 쉬움, 거의 정렬된 배열에서는 빠르게 종료될 수 있음단점 : 속도가 느리고, 다른 효율적인 정렬 알고리즘에 비해 많이 사용되지 않음선택 정렬 (Selection Sort)O(n²)장점 : 메모리 사용이 적고, 단순한 구조로 이해 & 구현이 쉬움단점 : 속도가 느리고, 다른 효율적인 정렬 알고리즘에 비해 많이 사용되지 않음삽입 정렬 (Insertion Sort)O(n²)장점 : 작은 데이터나 거의 정렬된 데이터에 대해 매우 효율적단점 : 속도가 느려서 대규모 데이터에 비효율적병합 정렬 (Merge Sort)O(n log n)장점 : 속도가 빠르며 대규모 데이터에서도 일정한 성능을 보임단점 : 추가 메모리 공간이 필요하며, 메모리 효율이 떨어질 수 있음퀵 정렬 (Quick Sort)평균 O(n log n), 최악 O(n²)장점 : 평균적으로 매우 빠르고, 메모리 사용이 적음단점 : 피벗 선택에 따라 성능이 달라지며, 최악의 경우 속도가 느려질 수 있음 (그러나 최악이 되는 경우는 거의 없음)메모리가 부족한 시스템에서 어떤 문제를 해결하는데 재귀로 쉽게 구현이 가능할 것 같습니다. 여러분이라면 메모이제이션과 타뷸레이션 중 어떤 걸 이용하실 건가요? 이유를 함께 적어주세요.메모이제이션(Memoization)재귀를 사용하면서 이미 계산된 값을 기억하고 활용하는 방식으로, 필요할 때 계산된 값을 바로 반환해서 사용재귀 구조를 그대로 유지하면서도 중복 계산을 피할 수 있음타뷸레이션(Tabulation)문제를 하위 문제부터 점진적으로 해결하는 방식으로, 반복문을 사용해 값을 채워나가는 방식메모리 부족한 상황이라면 타뷸레이션을 사용할 것 같습니다.타뷸레이션은 스택 오버플로우 위험이 없고, 재귀 호출에 따른 추가적인 메모리 오버헤드가 발생하지 않기 때문에 메모리를 더 효율적으로 사용할 수 있습니다. 

백엔드CS전공지식그림으로쉽게배우는자료구조와알고리즘그림으로쉽게배우는운영체제인프런워밍업클럽2기감자

빠타박스

[인프런 워밍업클럽 2기] CS전공지식_발자국_3주차 (Final)

1. 개요이름: 인프런 워밍업 클럽 2기 - CS 전공지식 빠타박스 [신충식]기간: 2024.10.14 - 2024.10.182. 목표 및 성과설정한 목표: 가벼운 학습 CS 지식 습득 및 중요한 부분에 대한 습득달성한 성과: 마무리 지점에 여러가지 중요한 내용이 운영체제를 통해 습득하게 되었다. 3. 잘된 점 (Keep)성공적인 요소:4. 개선할 점 (Problem)문제점 : 이번 과정이 끝나더라도 한번더 복습해야 한다. (정리하지 못한 부분도 존재한다)   5. 다음 단계 (Try)향후 계획: 정보처리기사 실기 시험이 끝나고 해당 내용을 복습하고자 한다. 무제한 강의 특성상 좋다. 휴.. 인생실기 시험 끝나면 심화도 봐서 코딩테스트 문제를 풀기에 적합할 수 있도록 되어야 겠지..그리고 아직 적지 못한 C++코드를 분석할 예정이다.  6. 기타 의견일주일 동안 학습하며3주차 과정은 조금 힘든 과정이다 지금 이걸 작성하고 내일 모래면 정처기 실기시험이 있다.최선을 다하자... 이 실기가 끝나면 꼭 1트만에 합격해서 끝내고 알고리즘 자료구조를 학습하고 면접 내용을 정리하며,프로젝트를 진행하면서 게임 출시까지도 보고 앞으로 나아가자...3주차 미션에 대해휴.. 3주차 미션은 좀 더 운영체제 같은 것 들을 중요시 했고 간단하면서도 어려웠다.이 이유는 내가 정처기에 빠져있고, 현재로써 제대로된 집중을 하지 못했기 때문이다.즐거웠다. 이 과정을 지나면서 하지만. 스터디 클럽이라기 보다. 자기주도 학습 유도 와 보상심리를 이용한 나아감이였다. 꼭 완주 하고 싶다. 하지만 배워야한다. 라는 느낌? 그래도 이 과정이 있어서 정말 다행이다. 저렴하게 강의 시청을 할 수 있었다는 점과. 이 과정의 커리큘럼대로 시간표대로 진행함에 있어서 어려움을 좀 덜 느꼈던거 같다. 다양한 사람들의 학습 방법에 대해 한번 눈여겨 보기도 한다.  요즘 젊은이들은 어떻게 공부하는가... 흠... 나에게 적용할 부분이 무엇인가. 미션을 좀 이렇게 해볼걸...이번 풀이는 좀 구글링 한 부분도 있었다. 아무래도 제대로된 이해를 하기 힘든 부분이 있었다. 이번 학습에 대해서 아직 제대로 정리도 못한 상황이다. 실기가 끝나면 바로 적용해야지  빠타박스노션 https://gibeonsoftwork.notion.site/2-CS-10e530ec4ad680ff802cf36606049182?pvs=4 소감내 군대시절 우연히~들었던 믿지 못할 한마디~게임 개발 할 수 있다는 매혹적인 얘기내게 꿈을 심어주었어~ 말도 안돼 고갤 저어도~내안에 나 나를보고 속삭여~코테 공부하는 자는 CS 필수라고~용기를 내 넌 할 수 있어!쉼 없이 흘러가는 3주~ (정처기는 6주째)이대로 !!! 유튜브 볼순 없잖아~~!!!인프런과 도전하는거야!!!인프런 감자 손을잡고!정처기 CS 모두의 꿈을 모아서!!!!!!!~~~~~~~~~~~~~~~~~~~~~~~~~~~ 감자의 거센 속도~!!! javascript!~~!!!!빠타 앞길 막아서도 결코 두렵지 않아(chatgpt~~!)끝없이 펼쳐진 수많은 코드들~~~밝은 미래 위한 거야~~~~ 인프런!~ 

알고리즘 · 자료구조cs-미션-발자국cs-발자국인프런워밍업클럽2기워밍업CS지식자료구조알고리즘감자타이틀곡

minme9055

[인프런 워밍업 클럽 2기 CS] 2주차 발자국

운영체제SJF (Shortest Job First)가장 짧은 실행 시간을 가진 작업을 먼저 처리하는 스케줄링 알고리즘평균 대기 시간을 최소화하는 효과가 있지만, 실행 시간을 정확히 예측하기 어려워 사용에 제한이 있음RR (Round Robin)각 프로세스에 고정된 시간 할당량(타임 슬라이스)을 부여하여 순환 방식으로 CPU를 할당하는 알고리즘공정성을 보장하지만, 타임 슬라이스 설정이 성능에 큰 영향을 미침MLFQ (Multi-Level Feedback Queue)다중 우선순위 큐를 사용하여 프로세스의 특성에 따라 동적으로 우선순위를 조정하는 스케줄링 알고리즘CPU Bound 프로세스는 장시간 CPU를 점유하여 우선순위가 낮은 큐로 이동I/O Bound 프로세스는 자주 I/O 작업을 수행하여 높은 우선순위 큐로 유지프로세스 간 통신 (Inter-Process Communication, IPC)프로세스들이 데이터를 교환하거나 동기화하기 위해 사용하는 메커니즘주요 방법: 파이프, 메시지 큐, 공유 메모리, 소켓효율적인 통신을 위해 다양한 기술이 사용됨공유 자원과 임계 구역 (Critical Section)여러 프로세스나 스레드가 동시에 접근할 수 있는 자원을 사용할 때 발생할 수 있는 문제를 방지자원 접근을 제한하는 코드 블록을 임계 구역이라고 함임계 구역을 효과적으로 관리하는 것이 중요함세마포어 (Semaphore)임계 구역을 제어하기 위한 동기화 도구로, 자원의 사용 가능 수를 추적하는 카운터 사용P (wait) 연산: 자원을 요청하고, 사용 가능할 때까지 대기V (signal) 연산: 자원을 해제하고, 대기 중인 프로세스에게 자원을 양도이를 통해 동시 접근 문제를 해결모니터 (Monitor)고수준의 동기화 메커니즘데이터 구조와 관련 연산을 하나의 단위로 묶어 상호 배제를 보장세마포어보다 구조화된 접근을 제공하여 동시성 문제를 쉽게 관리데드락이란? (feat. 식사하는 철학자)두 개 이상의 프로세스가 서로가 점유하고 있는 자원을 기다리며 무한히 대기하는 상태식사하는 철학자 문제는 이를 설명하는 대표적인 예제로, 철학자들이 포크를 공유하며 식사할 때 발생할 수 있는 교착상태를 보여줌데드락 해결 (feat. 은행원 알고리즘)교착상태를 방지하거나 해결하기 위한 방법 중 하나로 은행원 알고리즘을 사용시스템이 안전 상태(safe state)를 유지하도록 자원 할당을 사전에 검증하여 교착상태를 예방안전 상태란 모든 프로세스가 요청을 완료할 수 있는 상태를 의미함메모리 종류주기억장치(RAM): 휘발성 메모리로 프로그램 실행 중 데이터를 저장보조기억장치(HDD, SSD): 비휘발성 메모리로 영구적으로 데이터를 저장캐시 메모리: CPU와 주기억장치 간의 속도 차이를 줄이기 위해 사용되는 고속 메모리메모리와 주소메모리는 고유한 주소(address)를 통해 접근각 메모리 셀은 고유한 주소를 가지며, 프로그램은 이 주소를 사용하여 데이터를 읽거나 씀주소 체계는 메모리 관리와 프로세스 간의 통신에 중요한 역할을 함메모리 할당 방식정적 할당: 컴파일 시 메모리 크기가 결정되며, 프로그램 실행 중 변경되지 않음동적 할당: 프로그램 실행 중에 메모리를 할당하고 해제할 수 있음자료구조와 알고리즘재귀 (Recursion)함수가 자기 자신을 호출하여 문제를 해결하는 프로그래밍 기법문제를 더 작은 하위 문제로 분할하여 해결기저 조건을 정의하여 재귀 호출을 종료재귀적으로 생각하기문제를 자기 자신과 유사한 더 작은 문제로 분해하여 해결하는 접근 방식특히 데이터 구조의 트리 구조나 분할 정복 알고리즘에서 유용함재귀 - 하노이 탑 (Tower of Hanoi)재귀적 접근을 통해 해결할 수 있는 고전적인 문제n개의 원반을 시작 기둥에서 목표 기둥으로 옮기는 과정에서 재귀 호출을 이용하여 효율적으로 문제를 해결정렬 - 버블정렬 (Bubble Sort)인접한 요소를 비교하여 필요에 따라 교환하면서 리스트를 정렬하는 단순한 정렬 알고리즘구현이 쉽지만 시간 복잡도가 O(n²)으로 비효율적임정렬 - 선택정렬 (Selection Sort)리스트에서 가장 작은(또는 큰) 요소를 찾아 현재 위치에 교환하는 방식으로 정렬하는 알고리즘시간 복잡도는 O(n²)이며, 데이터 이동이 적은 편이지만 안정적이지 않음2주차 후기운영체제에서 처음 접하는 단어들이 난무하는 2주차였다. 잠시 정신이 혼미할 뻔 했지만 😵‍💫 내용을 차근히 따라가면서 조금씩 이해해 나갈 수 있었던 것 같다. 특히 개념 - 개념과 관련된 문제와 그 원인 - 해결의 관점에서 접근하니 나름 재밌게 공부했던 것 같다.알고리즘은 말은 많이 들어봤지만 실제로 잘 써본 경험은 없는 개념들에 대해 공부했다. 실제로 구현도 해 보면서 진행하니 이해하는 데 많은 도움이 되었다.이번 주는 '프론트엔드 개발자로 일을 할 때 이런 개념들까지도 알아야하나?'라는 생각이 들었던 것 같다. 뭔가 프론트보다는 서버에서 더 많이 접할 것 같은 느낌? 그래도 알아두면 나중에 도움이 될 테니 이해를 잘 해둬야겠다는 생각을 했다.

알고리즘 · 자료구조인프런인프런워밍업클럽CS운영체제자료구조알고리즘감자2주차

하얀종이개발자

인프런 워밍업 클럽 2기 - CS 전공지식 스터디 2주차 발자국

운영체제 2주차 학습 요약 CPU 스케쥴링 알고리즘SJF (Shortest Job First)짧은 작업 시간을 가진 프로세스에 먼저 CPU를 할당하는 방식버스트 타임이 긴 프로세스는 계속 실행되지 않을 수 있고, 어떤 프로세스가 얼마나 실행될지 예측이 어려움RR (Round Robin)시간을 균등하게 분배하여 각 프로세스에 순차적으로 CPU를 할당하는 방식컨텍스트 스위칭으로 인해 처리량이 늘어남MLFQ (Multi Level Feedback Queue)프로세스의 우선순위를 동적으로 조절하여 CPU를 효율적으로 할당하는 방식오늘날 운영체제에서 가장 일반적으로 사용됨프로세스 동기화여러 프로세스가 공유 자원에 동시에 접근할 때 순서를 정하여 데이터의 일관성을 유지하는 것프로세스간 통신의 종류한 컴퓨터 내에서 프로세스간 통신하는 방법 : 파일 or 파이프를 이용한 프로세스 내에서 쓰레드간 통신하는 방법 : 데이터 or 힙영역을 이용네트워크를 이용하여 통신하는 방법 : 소켓통신, RPC공유자원과 임계영역공유자원은 프로세스 혹은 스레드간 통신할 때 공동으로 이용하는 변수나 파일 같은 것들공유자원은 여러 프로세스가 공유하고 있기 때문에 각 프로세스의 접근 순서에따라 결과가 달라질 수 있음임계영역은 프로세스 혹은 스레드가 동시에 사용하면 안되는 영역 (접근 순서등의 이유로 결과가 달라지는 영역)경쟁조건은 공유자원을 서로 사용하기 위해 경쟁하는 것임계구역 문제를 해결하기 위한 조건상호배체임계영역엔 하나의 프로세스만 접근해야 함한정대기기다리는 프로세스는 언제가는 임계영역에 접근 할 수 있어야함진행의 융통성한 프로세스가 다른 프로세스의 일을 방해해서는 안됨세마포어 & 모니터뮤텍스는 공유자원을 lock()과 unlock()을 이용하여 프로세스의 접근을 제어하는 메커니즘여러 프로세스의 접근을 관리할 수 있으면 세마포어 (뮤텍스는 동기화 대상이 오직 하나임)세마포어는 잘못된 사용으로 임계영역을 보호받지 못할 수 있음 (세마포어를 사용하지 않고 임계구역에 들어간 경우)이를 해결한 방식이 모니터모니터는 공유자원을 숨기고 접근에 대한 인터페이스만 제공하여 공유자원에 안전하게 접근하게 하는 메커니즘운영체제가 처리하는게 아니라 프로그래밍 언어차원에서 지원하는 방법임교착상태 (데드락)두개 이상의 프로세스들이 서로가 가진 자원을 기다리다 아무도 작업을 진행하지 못하는 상태데드락 필요조건상호배제비선점점유대기원형대기은행원 알고리즘총 자원의 양과 현재 할당한 자원의 양을 기준으로 안정 또는 불안정 상태로 나누고, 교착상태가 발생하지 않는 수준이 되도록 자원을 할당하는 알고리즘검출 & 회복교착상태는 어떻게 검출하지?가벼운 교착상태 검출 (타이머)일정시간마다 작업을 조작하고 교착상태가 발생하면 체크포인트로 롤백무거운 교착상태 검출 (순환구조)교착상태를 일으킨 프로세스를 강제 종료시키고 다시 실행 시킬때 체크포인트로 롤백오버헤드가 발생하지만 억울하게 종료되는 프로세스는 발생하지않음메모리레지스터 (32bit 또는 64bit)캐시CPU와 메인메모리 속도 차이 때문에 미리 데이터를 저장하는 임시공간메인메모리 (RAM)프로세스를 로드, 휘발성보조기억장치 (SSD, HDD)디스크 저장, 비휘발성물리 주소 - 물리적인 메모리 주소논리 주소 - 사용자 관점에서 본 상대적 주소, 사용자는 논리 주소를 통해 물리 주소로 접근메모리 할당방식가변분할방식메모리에 연속해서 프로세스를 할당단점으로 외부 단편화가 발생할 수 있음고정분할방식메모리를 정해진 크기로 나누어 프로세스를 할당단점으로 내부 단편화가 발생할 수 있음버디시스템메모리를 2의 제곱 수로 분할하여 할당하는 방식가변분할방식과 고정분할방식을 합친 방법 알고리즘 & 자료구조 2주차 학습 요약 재귀 & 재귀적으로 생각하기재귀는 자기 자신을 다시 호출하는 함수를 말함어떤 문제를 해결하기 위해 문제의 부분 문제를 같은방식으로 해결하는 과정하향식 풀이에서 활용됨 (하위 문제를 기반으로 해결)하노이탑 구현하기세개의 기둥과 서로 다른 크기의 원반들이 있을때 가장 큰 원반이 아래에 있고 위로 갈수록 작은 원반으로 이루어져있음하나의 기둥에 있는 원반들을 다른 기둥으로 옮겨야 함기둥 A에 있는 원반을 기둥 C로 옮기기 (하향식 접근으로 풀이)  처음 시작 그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편) 캡쳐  모두 옮김그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편) 캡쳐자바코드public class HanoiTop { void hanoi(int count, String from, String to, String temp){ if(count == 0) return; hanoi(count - 1, from, temp, to); System.out.printf("원반 %d를 %s에서 %s로 이동\n", count, from, to); hanoi(count - 1, temp, to, from); } public static void main(String[] args) { HanoiTop hanoiTop = new HanoiTop(); hanoiTop.hanoi(3, "A", "C", "B"); } } 버블정렬앞에 있는 숫자와 옆에 있는 숫자를 비교해서 자리를 바꾸는 알고리즘자바코드public class BubbleSort { void bubbleSort(int[] arr) { // 사이클 - 자리교체는 (배열의 갯수 - 1) 번 수행함 for (int i = 0; i < arr.length - 1; i++) { // 횟수 - 정렬이 된 원소의 이전 원소보다 하나 이전의 원소까지 순회 // 시작점이 (arr.length-i-1)번 임 for (int j = 0; j < (arr.length - i - 1); j++) { // 앞의 데이터가 뒤에 데이터보다 더 크다면? if (arr[j] > arr[j + 1]) { // 데이터 자리변경 int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } public static void main(String[] args) { int[] arr = {2, 3, 1, 4}; // 정렬 전 - arr = [2, 3, 1, 4] System.out.println("정렬 전 - arr = " + Arrays.toString(arr)); BubbleSort bubbleSort = new BubbleSort(); bubbleSort.bubbleSort(arr); // 정렬 후 - arr = [1, 2, 3, 4] System.out.println("정렬 후 - arr = " + Arrays.toString(arr)); } } 선택정렬정렬되지 않은 배열의 첫번째 원소를 시작으로 마지막 원소까지 탐색하여 가장 작은 값을 정렬되지 않은 첫번째 배열로 가져오는 알고리즘자바코드public class SelectionSort { void selectionSort(int[] arr) { // 1 사이클의 순회는(배열의 갯수 - 1) 번 수행됨 for (int i = 0; i < arr.length - 1; i++) { int minValueIndex = i; // 가장 작은 값을 탐색하기위해 순회 for (int j = i + 1; j < arr.length; j++) { if (arr[j] < arr[minValueIndex]) { // 작은값 저장 minValueIndex = j; } } // 자리 변경 int temp = arr[i]; arr[i] = arr[minValueIndex]; arr[minValueIndex] = temp; } } public static void main(String[] args) { int[] arr = {4, 2, 1, 3}; // 정렬 전 - arr = [4, 2, 1, 3] System.out.println("정렬 전 - arr = " + Arrays.toString(arr)); SelectionSort selectionSort = new SelectionSort(); selectionSort.selectionSort(arr); // 정렬 후 - arr = [1, 2, 3, 4] System.out.println("정렬 후 - arr = " + Arrays.toString(arr)); } }  회고2주차 스터디를 진행하면서 정해진 진도도 학습하면서, 스터디안에 발표스터디에 참여해서 복습도 하는 과정이었어요. 적어보였던 운영체제의 내용이 생각보다 많아서 정리하는데 은근 시간이 오래 걸리더라구요. 그래도 스터디안의 발표 스터디에 참여하여 정리내용을 발표하고 다른 스터디원들의 발표내용도 듣고 헷갈리는 부분도 토론해서 도움이 많이 되었던 한 주 였던것 같습니다.스터디 발표 정리 자료 캡쳐그리고 이번 알고리즘 강의에서는 항상 어렵게 느꼈던 재귀에 대해 조금은 이해한게 너무 좋았습니다.어떤 문제를 해결하기 위해 문제의 부분 문제를 같은 방식으로 분해하여 해결한다.!! 재귀함수 내에서 자기 자신을 호출할 때 이 함수가 벌써 구현이 되어있다고 가정하고 재귀함수를 구현한다.!! 많이 연습해봐야겠지만 그래도 재귀적으로 생각하는 방법을 느낄 수 있었던 것 같습니다.마지막 1주가 남았는데, 끝까지 열심히 해서 끝까지 완주해야겠네요. 화이팅

백엔드인프런워밍업클럽2기CS전공지식2주차발자국감자

minme9055

[인프런 워밍업 클럽 2기 CS] 2주차 미션

운영체제 (Operating Systems)1. FIFO 스케줄링의 장단점FIFO (First-In, First-Out) 스케줄링은 먼저 도착한 프로세스를 먼저 실행하는 방식입니다.장점:단순함: 구현이 매우 간단하고 이해하기 쉽습니다.공정성: 모든 프로세스가 도착한 순서대로 처리되어 순서에 대한 공정성을 보장합니다.단점:긴 대기 시간: 긴 실행 시간을 가진 프로세스가 먼저 도착하면, 뒤에 있는 짧은 프로세스들이 오랜 시간 대기해야 합니다.비효율성: 응답 시간이 중요한 시스템에서는 비효율적일 수 있습니다.2. SJF 사용의 어려움SJF (Shortest Job First)는 실행 시간이 가장 짧은 작업을 먼저 처리하는 스케줄링 알고리즘입니다.사용하기 어려운 이유:실행 시간 예측의 어려움: 실제 환경에서는 프로세스의 정확한 실행 시간을 사전에 알기 어렵습니다.스타베이션 문제: 긴 작업이 지속적으로 도착할 경우, 긴 작업들이 계속 뒤로 밀려 무기한 대기할 수 있습니다.동적 변화 대응의 어려움: 시스템 부하나 프로세스 특성이 변할 때 유연하게 대응하기 어렵습니다.3. RR 스케줄링에서 타임 슬라이스가 너무 작을 때 발생하는 문제RR (Round Robin) 스케줄링은 각 프로세스에 고정된 시간 할당량을 부여하여 순환 방식으로 CPU를 할당하는 알고리즘입니다.문제점:오버헤드 증가: 프로세스 간의 컨텍스트 스위칭이 빈번하게 발생하여 시스템 오버헤드가 증가합니다.실행 시간 비효율성: 짧은 타임 슬라이스로 인해 많은 스위칭이 필요하게 되어 실제 작업에 소요되는 시간이 늘어날 수 있습니다.캐시 효율 저하: 잦은 컨텍스트 스위칭으로 인해 캐시 히트율이 떨어지고, 캐시 미스가 증가할 수 있습니다.4. MLFQ에서 CPU Bound Process와 I/O Bound Process 구분 방법MLFQ (Multi-Level Feedback Queue)는 여러 개의 우선순위 큐를 사용하여 프로세스의 특성에 따라 동적으로 우선순위를 조정하는 스케줄링 알고리즘입니다.CPU Bound Process: 주로 CPU를 많이 사용하는 프로세스로, MLFQ에서는 장시간 CPU를 점유하는 경향이 있어 우선순위가 낮은 큐로 이동할 수 있습니다.I/O Bound Process: 자주 I/O 작업을 수행하고 CPU 사용 시간이 짧은 프로세스로, I/O 요청 시 우선순위가 상승하여 높은 우선순위 큐로 이동합니다.운영체제는 프로세스의 CPU 사용 패턴과 I/O 활동을 모니터링하여, 각 프로세스가 CPU Bound인지 I/O Bound인지를 판단하고 적절한 우선순위를 할당합니다.5. 공유 자원이란?공유 자원 (Shared Resource)은 여러 프로세스나 스레드가 동시에 접근하여 사용할 수 있는 자원을 말합니다. 예를 들어, 파일, 데이터베이스, 프린터, 메모리 공간 등이 있습니다.특징:동시 접근 가능성: 여러 프로세스가 동시에 접근할 수 있어 효율적인 자원 활용이 가능합니다.경합 상태: 동시에 접근하면 상호 배제(Mutual Exclusion)나 일관성 유지 문제 등이 발생할 수 있습니다.동기화 필요성: 공유 자원에 대한 올바른 접근을 보장하기 위해 동기화 메커니즘(예: 세마포어, 뮤텍스)을 사용해야 합니다.6. 교착상태 발생 조건교착상태 (Deadlock)는 두 개 이상의 프로세스가 서로가 점유하고 있는 자원을 기다리며 무한히 대기하는 상태를 말합니다. 교착상태가 발생하기 위해서는 다음 네 가지 조건이 모두 충족되어야 합니다:상호 배제 (Mutual Exclusion): 자원은 동시에 하나의 프로세스만 사용 가능해야 합니다.점유와 대기 (Hold and Wait): 한 프로세스가 자원을 점유하면서 추가적인 자원을 기다려야 합니다.비선점 (No Preemption): 이미 할당된 자원을 선점할 수 없어야 합니다.순환 대기 (Circular Wait): 프로세스들이 자원에 대해 순환적으로 대기하는 선형 경로가 존재해야 합니다.이 조건들을 모두 만족하면 교착상태가 발생할 수 있으므로, 이를 방지하거나 해결하기 위해서는 이 조건들 중 하나 이상을 위반해야 합니다.자료구조와 알고리즘 (Data Structures and Algorithms)1. 재귀함수에서 기저조건 미설정 시 발생 문제재귀 함수 (Recursive Function)에서 기저 조건 (Base Case)은 재귀 호출을 종료시키는 조건입니다. 기저 조건을 만들지 않거나 잘못 설정하면 다음과 같은 문제가 발생할 수 있습니다:무한 재귀 호출 (Infinite Recursion): 기저 조건이 없으면 함수가 자기 자신을 계속해서 호출하게 되어 종료되지 않고 무한히 실행됩니다.스택 오버플로우 (Stack Overflow): 재귀 호출이 계속해서 쌓이면서 호출 스택이 가득 차게 되어 프로그램이 충돌하거나 비정상 종료될 수 있습니다.논리적 오류: 기저 조건이 잘못 설정되면 함수가 의도한 대로 동작하지 않아 잘못된 결과를 반환할 수 있습니다.따라서 재귀함수를 구현할 때는 적절한 기저 조건을 설정하여 재귀 호출이 올바르게 종료되도록 해야 합니다.2. 0부터 입력 n까지 홀수의 합을 더하는 재귀 함수 구현function sumOdd(n) { // 기저 조건: n이 0보다 작거나 같을 때 if (n <= 0) { return 0; } // n이 홀수인 경우 if (n % 2 !== 0) { return n + sumOdd(n - 1); } // n이 짝수인 경우 return sumOdd(n - 1); } console.log(sumOdd(10)); // 출력: 25 console.log(sumOdd(15)); // 출력: 64기저 조건: n이 0보다 작거나 같을 때 0을 반환하여 재귀 호출을 종료합니다.홀수 처리: n이 홀수인 경우, n을 더하고 n - 1을 인자로 재귀 호출합니다.짝수 처리: n이 짝수인 경우, n을 더하지 않고 n - 1을 인자로 재귀 호출합니다.예제 실행:sumOdd(10)은 1 + 3 + 5 + 7 + 9 = 25를 반환합니다.sumOdd(15)는 1 + 3 + 5 + 7 + 9 + 11 + 13 + 15 = 64를 반환합니다.

알고리즘 · 자료구조인프런인프런워밍업클럽CS운영체제자료구조알고리즘감자2주차

geyun6026

워밍업 클럽(CS) 두번째 미션📓

운영체제Q1. FIFO 스케줄링의 장단점이 뭔가요?장점 : 단순하고 직관적단점 : 한 프로세스가 완전히 끝나야 다음 프로세스 시작, I/O 작업 시 CPU가 기다려야 하므로 사용률이 떨어짐. Q2. SJF를 사용하기 여러운 이유가 뭔가요?어떤 프로세스가 얼마나 실행될 지 예측하기가 어렵고, Burst Time이 긴 프로세스는 오랫동안 실행되지 않을 수 있는 문제가 있다. Q3. RR 스케줄링에서 타임 슬라이스가 아주 작으면 어떤 문제가 발생할까요?타임 슬라이스가 작으면 컨텍스트 스위칭이 너무 자주 일어나게 되어 오버헤드가 발생한다. Q4. 운영체제가 MLFQ에서 CPU Bound Process와 I/O Bound Process를 어떻게 구분할까요?스스로 CPU를 반납하면 CPU 사용이 적은 I/O Bound Process로 판단, 타임 슬라이스 크기를 오버해서 CPU 스케줄러에 의해 강제로 CPU를 뺏기는 상황이면 CPU Bound Process로 판단 Q5. 공유자원이란 무엇인가요?프로세스 간 통신을 할 때 공동으로 이용하는 변수나 파일들 Q6. 교착상태에 빠질 수 있는 조건은 어떤 것들을 충족해야할까요?상호배제/ 비선점/ 점유와 대기/ 원형 대기 자료구조와 알고리즘 Q1. 재귀함수에서 기저조건을 만들지 않거나 잘못 설정했을 때 어떤 문제가 발생할 수 있나요?콜스택(메모리 공간)이 가득 차서 자동으로 종료됨 Q2. 0부터 입력 n까지 홀수의 합을 더하는 재귀 함수를 만들어보세요.function sumOdd(n){ if(n <= 0) return 0; else if(n % 2 == 1){ return n + sumOdd(n - 2); } else{ return sumOdd(n - 1); } } console.log(sumOdd(10)) // 25

알고리즘 · 자료구조워밍업클럽자료구조알고리즘운영체제감자

geyun6026

워밍업 클럽 2주차 발자국🐾

그림으로 쉽게 배우는 자료구조와 알고리즘재귀(recursion) : 어떠한 것을 정의할 때 자기 자신을 참조하는 것콜스택함수가 호출되면서 올라가는 메모리 영역, 스택이라고도 부름First In Last Out(그림을 보면 기억이 더 잘 날 것 같아서 캡쳐! FILO를 시각적으로 이해할 수 있어서 좋다💕)재귀함수 예시 : 팩토리얼 함수function factorial(number){ if(number == 1 || number == 0){ return 1; } else{ return number * factorial(number - 1); } }(이게 어떻게 구현이 가능한 것인지 완벽히 이해되지는 않지만, 이렇게 간단히 표현 할 수 있다는 것이 놀랍다.)재귀적으로 생각하기하위 문제의 결과를 기반으로 현재 문제를 계산 -> 하향식 계산재귀함수의 위력은 하향식 계산에서 발휘 배열의 합 function sumArray(arr){ if(arr.length == 1) return arr[0]; return sumArray(arr.slice(0, -1)) + arr[arr.length -1]; }문자열의 길이를 계산function strLength(arr){ if(arr[0] == null) return 0; return strLength(arr.slice(0, -1)) + 1; }지수함수(밑 x, 지수 n)function power(x, n){ if(n == 0) return 1; retrun power(x, n-1) * x; }하노이 탑function hanoi(count, from, to, temp){ if(count == 0) return; hanoi(count - 1, from, temp, to); console.log({"원반 ${count}를 ${from}에서 ${to}로 이동"); hanoi(count -1, temp, to, from); } hanoi(3, "A", "C", "B"); 정렬 - 버블 정렬(Bubble Sort)데이터를 옆 데이터와 비교하면서 자리를 바꿈function BubbleSort(arr){ for(let i = 0; i < arr.length - 1; i++){ for(let j = 0; j < (arr.length - i - 1); j++){ if(arr[j] > arr[j + 1]){ let temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } }버블정렬의 성능 : Ο(n²)장점 : 이해와 구현이 간단함단점 : 성능이 좋지 않음 정렬 - 선택 정렬(Selection Sort)배열의 정렬되지 않은 영역의 첫 번째 원소를 시작으로 마지막 원소까지 비교 후 가장 작은 값을 첫번째 원소로 가져옴function SelectionSort(arr){ for(let i = 0; i < arr.length - 1; i++){ let minValueIndex = i; for(let j = i + 1; i < arr.length; j++){ if(arr[j] < arr[minValueIndex]){ minValueIndex = j; } } let temp = arr[i]; arr[i] = arr[minValueIndex]; arr[minValueIndex] = temp; } } 선택 정렬의 성능 : Ο(n²)장점 : 이해와 구현이 간단함단점 : 성능이 좋지 않음 그림으로 쉽게 배우는 운영체제CPU 스케줄링운영체제는 모든 프로세스에게 CPU를 할당/해제하는데 이를 CPU 스케줄링이라고 한다.CPU 스케줄링에서 스케줄러(운영체제)가 고려해야 할 사항 첫번째, 어떤 프로세스에게 CPU 리소스를 줘야하는가?두번째, CPU를 할당받은 프로세스가 얼마의 시간동안 CPU를 사용해야하는가?스케줄링 목표 리소스 사용률오버헤드 최소화공평성 처리량대기시간응답시간스케줄링 알고리즘 FIFO(First In First Out) Burst Time이 짧은게 먼저 실행되면 평균 대기 시간이 짧아진다.SJF(Shortest Job First) 문제1 : 어떤 프로세스가 얼마나 실행될지 예측 어려움문제2 : Burst Time이 긴 프로세스는 오랫동안 실행되지 않을 수도 있다RR(Round Robin) 한 프로세스에 일정 시간만큼 CPU 할당(타임 슬라이스)타임 슬라이스가 작을 경우 컨텍스트 스위칭이 너무 자주 일어나게 되어 오버헤드 발생여러 프로세스가 동시에 실행되는 것처럼 느껴지면서 오버헤드가 너무 크지 않은 값을 찾아야 함Windows는 20ms, Unix는 100msMLFQ(Multi Level Feedback Queue) 오늘날 운영체제에서 가장 일반적으로 사용RR의 업그레이드 버전CPU Bound Process들에게는 타임 슬라이스를 크게 준다. 프로세스 동기화 프로세스 간 통신의 종류한 컴퓨터 내에서 프로세스 간 통신 파일과 파이프 이용쓰레드 이용(한 프로세스 내에서 쓰레드 간 통신)네트워크 이용(소켓통신, RPC(원격 프로시저 호출))공유자원과 임계구역공유자원 여러 프로세스가 공유하고 있기 때문에 각 프로세스의 접근 순서에 따라 결과가 달라질 수 있음"동기화 문제" 발생임계구역 여러 프로세스가 동시에 사용하면 안되는 영역상호 배제 메커니즘 필요 임계영역엔 동시에 하나의 프로세스만 접근한다.여러 요청에도 하나의 프로세스의 접근만 허용한다.임계구역에 들어간 프로세스는 빠르게 나와야한다.세마포어(상호베제 메커니즘의 한 가지)프린터실(공유자원) 열쇠관리자(운영체제) 예시 -> "열쇠 = 세마포어"단점 : wait()함수와 signal()함수의 순서를 이상하게 호출해서 세마포어를 잘못 사용할 가능성이 있음모니터세마포어의 단점을 해결한 상호배제 메커니즘프로그래밍 언어 차원에서 지원하는 방법자바 : synchronized교착상태(데드락)교착상태의 필요조건상호배제비선점점유와 대기원형 대기교착상태 해결 방법교착상태 회피 교착상태가 발생하지 않는 수준의 자원 할당전체 자원과 할당된 자원의 수를 기준으로 안정상태와 불안정상태 구분은행원 알고리즘 교착상태 검출 가벼운 교착 상태 검출 타이머 이용프로세스가 일정시간 동안 작업을 진행하지 않는다면 교착상태 발생 간주일정 시점마다 체크포인트를 만들어 작업 저장, 교착상태 발생했다면 마지막으로 저장했던 체크포인트로 롤백무거운 교착 상태 검출 자원 할당 그래프 이용프로세스가 어떤 자원을 사용하는지 지켜보고 교착상태가 발생했다면 해결교착상태를 일으킨 프로세스 강제 종료, 다시 실행할 때 체크포인트로 롤백자원 할당 그래프를 유지하고 검사해야 하기 때문에 오버헤드 발생 메모리메모리 종류레지스터 가장 빠른 기억장소, CPU 내에 존재휘발성 메모리32bit 64bit캐시 메인메모리에 있는 값을 레지스터로 옮기려면 한참 걸리기 때문에 필요할 것 같은 데이터 미리 가져와 저장메인메모리(RAM) 운영체제와 프로세스들이 올라가는 공간휘발성 메모리보조저장장치(HDD, SSD) 비휘발성 메모리 메모리와 주소 메모리 = 메인메모리(RAM)물리주소와 논리주소 - 사용자절대주소와 상대주소 - 메모리 관리자메모리 할당 방식 메모리 오버레이(memory overlay) 프로그램을 잘라서 실행시켜야 할 부분만 메모리에 올리고 나머지는 하드디스크(스왑영역)에 저장가변 분할 방식(세그멘테이션) 프로세스의 크기에 따라 메모리를 나누는 방식연속 메모리 할당장점 : 낭비되는 공간인 '내부 단편화'가 없음단점 : 외부 단편화 발생(조각모음으로 해결, but 실행되고 있는 프로세스 중지해야 함 오버헤드 발생)고정 분할 방식(페이징) 프로세스 크기와 상관없이 메모리를 할당비연속 메모리 할당장점 : 구현이 간단, 오버헤드가 적음단점 : 내부 단편화 발생버디 시스템(가변 + 고정 혼합) 2의 승수로 메모리 분할각 단점 최소화 

알고리즘 · 자료구조워밍업알고리즘자료구조운영체제감자

하얀종이개발자

인프런 워밍업 클럽 2기 - CS전공지식 스터디 미션 02 입니다.

CS전공지식 미션 2운영체제FIFO 스케줄링의 장단점이 뭔가요?FIFO (First In First Out) 스케쥴링은 말그대로 먼저 들어온 프로세스가 먼저 CPU를 할당 받는 방식을 말합니다.장점은 단순하게 들어온 순서대로 처리하기 때문에 이해와 구현이 쉽고, 프로세스가 작업이 완료될때까지 지속적으로 실행되기 때문에 CPU의 사용률을 높다는 것에 있습니다.단점으로는 진행되고 있는 프로세스가 완전히 끝나야만 다음 프로세스에 CPU를 할당할 수 있기 때문에, 만약 작업시간이 긴 프로세스가 먼저 실행되고 작업시간이 작은 프로세스가 다음에 실행된다고 한다면, 작은 프로세스는 계속 기다리는 상황이 생길 수 있습니다. 또한 도중에 I/O작업이 발생하면 CPU작업이 필요없는데도 I/O작업이 끝날때까지 CPU가 대기하는 비효율도 발생하게 됩니다.SJF를 사용하기 여러운 이유가 뭔가요?  SJF(Shortest Job First)는 짧은 작업시간을 가진 프로세스에 먼저 CPU를 할당하는 방식입니다. 그러나, 이론적으로는 FIFO보다 빠르지만 사용하기 어려운 이유가 있습니다.첫번째는 짧은 작업시간을 가진 프로세스를 선별해야 하는데 실제 어떤 프로세스가 얼마나 실행될지 예측이 어렵다는 점 입니다. 운영체제는 작업의 소요 시간을 사전에 예측하기 힘들며, 이를 정확히 판단하는 것은 거의 불가능합니다.두번째는 작업시간이긴 프로세스의 우선순위가 계속 뒤로 밀리면서 실행되지 못하고, 기아(starvation) 상태에 빠질 가능성이 있습니다. 이러한 문제들로 인해 SJF는 현실적으로 사용될 수 없습니다.RR 스케줄링에서 타임 슬라이스가 아주 작으면 어떤 문제가 발생할까요?RR(Round Robin)는 FIFO 스케쥴링의 단점을 해결하기위해 시간을 균등하게 분배하여 각 프로세스나 작업에 순차적으로 CPU를 할당하는 방식을 말합니다.타임슬라이스가 아주 작으면 타임슬라이스 마다 CPU가 할당되는 프로세스가 변경되는 만큼 컨텍스트 스위칭이 발생하기 때문에 처리량이 늘어날 수 있는 문제가 있습니다. 만약 프로세스의 처리량보다 컨텍스트 스위칭의 처리량이 커진다면 배보다 배꼽이 더 큰 상황이 될 수 있습니다.운영체제가 MLFQ에서 CPU Bound Process와 I/O Bound Process를 어떻게 구분할까요?MLFQ (Multi Level Feedback Queue)는 프로세스의 우선순위를 동적으로 조절하여 CPU를 효율적으로 할당하는 방식을 말합니다. MLFQ는 CPU Bound Process는 타임슬라이스를 크게 주고 I/O Bound Process는 타임슬라이스를 적게 주는 방식으로 동작하는데, 프로세스가 동작하면서 주어진 타임슬라이스를 모두 사용하고 운영체제에 의해 CPU를 빼앗기면 CPU Bound Process로 간주하여 우선순위를 낮춰 다음 실행될 때 더 큰 타임슬라이스를 부여하도록 하고, I/O작업이 발생하여 스스로 CPU를 반납하면 I/O Bound Process로 간주하여 우선순위를 높여 작은 타임슬라이스가 주어지도록 합니다.공유자원이란무엇인가요?공유자원은 여러 프로세스나 스레드가 동시에 접근할 수 있는 자원을 말합니다. 예를 들어, 파일, 프린터, 메모리 등이 있습니다. 공유자원은 여러 프로세스 혹은 스레드가 공유하고 있기 때문에 각 프로세스의 접근 순서에 따라 결과가 달라질수 있어 조심해야 합니다. (동기화 문제)교착상태에 빠질 수 있는 조건은 어떤 것들을 충족해야할까요?교착상태 (데드락)은 두개 이상의 프로세스들이 서로가 가진 자원을 기다리다 아무도 작업을 진행하지 못하는 상태를 말합니다. 교착상태에 빠질 수 있는 조건은 4가지인데 모두 충족해야 교착상태에 빠질 수 있습니다.상호 배제 : 어떤 프로세스가 한 리소스를 점유했다면 그 리소스는 다른 프로세스에게 공유되면 안됨비선점 : 프로세스 A가 리소스를 점유하고 있으면 다른 프로세스가 리소소를 빼앗을 수 없음점유대기 : 어떤 프로세스가 리소스 A를 가지고 있는 상태에서 리소스 B를 원하는 상황원형대기 : 점유와 대기를 하는 프로세스의 관계가 원형을 이루고 있음 자료구조와 알고리즘재귀함수에서 기저조건을 만들지 않거나 잘못 설정했을 때 어떤 문제가 발생할 수 있나요?재귀함수는 자기 자신을 다시 호출하는 함수를 말하는데, 문제를 반복적으로 더 작은 문제로 분해하여 해결하는데 사용됩니다. 이때 계속 자기 자신을 호출하므로 어느순간에는 호출을 멈춰야 하는데, 기저조건이 이 역할을 하게 됩니다.만약 기저조건을 만들지 않거나 잘못설정하면, 함수가 계속해서 자신을 호출하여, 스택오버 플로우가 발생하여 프로그램이 비정상적으로 종료 될 수 있습니다.2.0부터 입력 n까지 홀수의 합을 더하는 재귀 함수를 만들어보세요.자바스크립트 코드function sumOdd(n){ // 기저조건 : n이 0보다 작으면 0을 반환 if (n <= 0) return 0; // 홀수일 때는 n을 더하고, 짝수일 때는 n-1을 재귀호출 if(n % 2 !== 0) { return n + sumOdd(n - 2); } else { return sunOdd(n - 1); } } console.log(sumOdd(10)) // 25자바 코드개인적으로 자바를 사용하고 있어서 자바코드로도 작성해봤습니다.public class SumOddNumbers { // 0부터 n까지 홀수의 합을 구하는 재귀 함수 public static int sumOdd(int n) { // 기저 조건: n이 0 이하일 때 0을 반환 if (n <= 0) { return 0; } // n이 홀수인 경우 n을 더하고, 짝수인 경우 n-1로 재귀 호출 if (n % 2 != 0) { return n + sumOdd(n - 2); // n이 홀수일 때 } else { return sumOdd(n - 1); // n이 짝수일 때 다음 홀수로 } } public static void main(String[] args) { int n = 10; int result = sumOdd(n); System.out.println("0부터 " + n + "까지 홀수의 합: " + result); // 출력: 25 } }

백엔드인프런워밍업클럽2기cs전공지식스터디미션2주차감자

 집사

첫번째 발자국

'그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)'수강생 여러분께 하고 싶은 말외우려 하지 말고 이해해라 어렵다면 그림으로 풀어서 이해해라당장 이해하기 어렵다면 특징만 외우고 나중에 다시 공부하기이해를 했다면 기억도 오래 남고 특징들을 유추할 수 있다자료구조와 알고리즘이란?자료구조는 데이터가 어떤 구조로 저장되고 사용되는지를 나타낸다. (ex. int, float, 정적배열, 동적배열, 연결리스트 등)알고리즘은 어떤 문제를 해결하기 위한 확실한 방법이다.자료구조에 따라 알고리즘이 달라진다.어떤 구현을 할 때 하나의 자료구조가 하나의 알고리즘만을 사용할 수 있는건 아니다. 상황에 맞는 적절한 자료구조와 알고리즘을 적용할 수 있어야 한다.시간복잡도더 좋은 알고리즘이란 무엇일까? 이는 사용자의 요구에 따라 변한다. 보통 메모리, 속도로 구분되며 일반적으로 알고리즘의 속도를 성능의 척도로 사용시간복잡도란 특정 알고리즘이 어떤 문제를 해결할 때 걸리는 시간이며 사용자의 PC성능에 따라 시간 측정은 달라질 수 있으므로 코드에서 성능에 많은 영향을 주는 것을 찾아 실행 시간을 예측하는 것이다.시간복잡도는 최악의 경우를 표현하는 빅 오 표기법을 사용한다.빅 오 표기법은 가장 큰 영향을 미치는 항으로만 표현한다.보통 자료구조의 시간복잡도는 평균, 최악의 경우를 생각한다.자료구조배열연속된 메모리 공간을 할당 받는다.운영체제는 배열의 시작 주소만 기억한다.순차적으로 메모리가 적재되고 운영체제가 배열의 시작 주소를 알기에 인덱스를 통해 접근 가능하다.삽입, 삭제 시 공간이 부족하거나 중간에 있는 요소를 삭제 시 데이터에 대한 이동이 필요해서 오버헤드가 많이 발생한다.인덱스 참조 O(1) / 삭제, 삽입 성능 O(n)연길리스트배열의 단점을 해결하기 위해 만들어진 자료구조저장하려는 데이터들을 메모리 공간에 분산하여 할당하고 이 데이터들을 서로 연결이는 노드라는 것을 만들어 수행노드의 구조는 데이터를 담는 변수 하나와 다음 노드를 가리키는 변수 하나이러한 노드끼리 연결시킨것을 연결리스트라 한다.연결리스트는 첫 노드의 주소만 알고 있으면 다른 모든 노드에 접근 가능.삽입, 삭제시 다음 가리키는 노드만 바꿔주면 된다. / 삽입, 삭제 O(1)메모리 공간이 분산되어 있기에 인덱스 참조가 불가능 즉, 모든 노드 순회해야함 / 참조 O(n)스택First In Last Out (FILO)먼저 들어간 데이터가 나중에 나오는 자료구조삽입, 삭제, 참조 O(1) / 맨 위에 요소만 가능연결리스트, 배열 등으로 구현 가능사용 예제명령 / Undo, Redo문법 괄호 검사큐와 병행하여 회문 검사큐First In First Out (FIFO)먼저 들어간 데이터가 먼저 나오는 자료구조삽입, 삭제, 참조 O(1) / 맨 앞에 요소만 가능이중 연결리스트, 배열등으로 구현 가능사용예제대기열 / 마트 계산대, 게임 큐, 식당 줄 등운영체제 프로세스 작업 요청 / FIFO 스케줄링덱데이터의 삽입과 제거를 Head와 Tail 양쪽에서 자유롭게 할 수 있는 자료구조양방향 끝 삽입 삭제, 참조 O(1) / 가운데 O(n)해시테이블Key와 Value로 이루어진 자료구조Key를 이용한 해시함수를 통해 데이터를 저장만약 해시 충돌이 발생할 경우, 해당 인덱스의 연결리스트에 삽입해시함수의 구현에 따라 공간의 낭비가 극대화될 수도 최적화될 수도 있다.최고의 효율 : 참조, 삽입, 삭제 O(1)최악의 효율 : 참조, 삽입, 삭제 O(n)셋데이터의 중복을 허용하지 않는 자료구조해시 테이블을 활용하기에 해시 셋이라고도 불린다.셋은 헤시 테이블의 Value값은 사용하지 않고 Key만 사용해 구현한다.Key가 Key인 동시에 데이터로 사용하는 것'그림으로 쉽게 배우는 운영체제'운영체제 개요프로세스 관리 메모리 관리 하드웨어 관리 파일 시스템 관리운영체제의 구조운영체제의 핵심 커널은 프로세스와 메모리, 저장장치를 관리한다.사용자는 커널에 직접 접근할 수 없고 인터페이스를 통해 접근 가능하다. (GUI, CLI)어플리케이션은 시스템 콜을 통해 커널에 접근 가능하며, 이를 통해 메모리를 사용할 수 있다.하드웨어는 드라이버를 통해 커널에 접근 가능하다. 컴퓨터 하드웨어와 구조하드웨어로 프로그램을 만들었기에 프로그램이 달라질 때마다 매번 스위치와 배선을 다시 조정해야 했다.폰 노이만은 이를 해결하기 위해 CPU와 메모리를 두고 이들 사이는 버스로 연결한다.버스는 데이터를 전달하는 통로이다.메모리에 올라간 프로그램은 명령에 따라 처리된다.컴퓨터 하드웨어메인보드다른 하드웨어를 연결하는 장치장치 간에 데이터를 전송하는 건 메인보드의 버스가 담당.CPU메모리하드디스크그래픽카드마우스, 키보드, 사운드, 모니터 입출력 장치  CPU(Central Processing Unit)산술논리연산장치(Arithmetic and Logic Unit, ALU) : CPU 에서 실제로 데이터 연산을 담당제어장치 : 모든 장치들의 동작을 지시하고 제어레지스터 : CPU 내에서 계산을 위해 데이터를 임시로 보관하는 장치 메모리 종류RAM(Random Access Memory)랜덤으로 데이터를 읽어도 저장된 위치와 상관 없이 읽는 속도가 같다.전력이 끊기면 데이터를 잃는다(휘발성) / 메인 메모리로 사용ROM(Read Only Memory)전력이 끊겨도 데이터를 계속 보관 가능데이터를 한 번 쓰면 수정 불가능컴퓨터의 부팅과 관련된 바이오스를 저장하는데 사용컴퓨터의 부팅과정ROM에 저장된 BIOS 실행BIOS는 전원, CPU, 메모리, 키보드, 마우스, 하드디스크 등 주요 하드웨어에 이상이 없는지 확인하드디스크에 있는 마스터 부트 레코드에 저장된 부트로더를 메모리에 가져와 실행설치된 운영체제 실행, 메모리에 불러온다.바탕화면이 나오고 실행되는 모든 응용 프로그램은 메모리에 올라가 운영체제가 관리인터럽트입출력 처리 방식폴링CPU가 주기적으로 입출력 장치의 상태를 확인하는 방식효율성이 떨어지고 자원 낭비 심함인터럽트폴링 방식을 개선한 현재 사용되는 방식입력이나 출력이 발생하면 CPU에 인터럽트를 발생CPU는 현재 작업을 중단하고, 이 인터럽트를 처리하기 위해 인터럽트 처리 루틴(Interrupt Service Routine, ISR)로 이동 및 처리완료 후 다른 작업 수행프로세스와 쓰레드프로그램과 프로세스프로그램은 저장장치에 저장된 명령문의 집합체프로세스는 프로그램이 메모리에 올라가 실행중인 프로그램을 의미멀티프로그래밍과 멀티프로세싱멀티프로그래밍은 메모리에 여러 개의 프로세스가 올라간 것.멀티프로세싱은 CPU를 시분할로 여러 개의 프로세스를 처리하면서 동시에 실행되는 것처럼 보이게 하는 것.과거에는 메모리가 작기에 멀티프로그래밍이 불가하여 다른 저장장치에 있는 프로그램을 메모리에 올리는 스와핑을 통해 멀티프로세싱을 처리했다.PCB프로세스가 생성될 때 운영체제는 해당 프로세스의 정보를 가지고 있는 PCB(Process Control Block)를 만들어 저장한다.운영체제는 PCB들을 연결리스트로 관리한다.PCB의 구조포인터 : 부모와 지식 프로세스에 대한 포인터 / 할당된 자원에 대한 포인터 / 프로세스 상태 전환시 저장하는 포인터프로세스 상태 : 생성, 준비, 실행, 대기, 완료프로세스 ID : 식별자프로그램 카운터 : 다음에 실행될 명령어의 주소 저장 / 프로세스가 실행되던 지점 저장레지스터 정보 : 프로세스가 실행될 때 사용했던 레지스터 값들메모리 관련 : 프로세스가 메모리에 있는 위치 정보, 메모리 침범을 막기 위한 경계레지스터 값등 저장CPU 스케줄링 정보 : CPU 스케줄링에 필요한 우선순위, 최종 실행시간, CPU 점유시간 등이 저장등등프로세스 상태운영체제는 시분할 시스템을 활용하여 여러 개의 프로세스를 빠르게 전환하며 실행시킨다.시분할 처리를 위한 다섯가지 상태생성(New) : PCB를 생성하고 메모리에 프로그램 적재를 요청한 상태준비(Ready) : CPU를 사용하기 위해 기다리는 상태대기(Waiting) : 프로세스가 입출력 요청을 하면 입출력이 완료될 때 까지 기다리는 상태 / CPU는 굉장히 빠르고 입출력 작업은 상당히 느리다. 입출력 요청을 하는 프로세스가 완료될 때 까지 CPU를 기다리게 하는 것은 비효율적이기에 대기 상태가 만들어졌다.실행(Running) : CPU 스케줄러에 의해 CPU를 할당받아 실행되는 상태 / 실행상태에 있는 프로세스의 수는 CPU의 개수만큼 존재할 수 있다.완료(Terminated) : 프로세스가 종료된 상태 / 프로세스가 사용했던 데이터를 메모리에서 제거하고 PCB도 제거 컨텍스트 스위칭컨텍스트 스위칭은 프로세스를 실행하는 중에 다른 프로세스를 실행하기 위해 실행중인 프로세스 상태를 저장하고 다른 프로세스의 상태값으로 교체하는 작업을 의미.컨텍스트 스위칭이 일어날 때 PCB의 내용이 변경된다.실행중인 프로세스의 작업내용을 PCB에 저장하고 실행될 프로세스의 PCB의 내용대로 CPU가 다시 세팅된다.컨텍스트 스위칭이 일어날 때 PCB에 변경되는 값들은 아래와 같다.프로세스 상태프로그램 카운터레지스터 정보메모리 관련 정보 프로세스의 CPU 점유시간을 초과하거나 입출력 작업요청 등이 들어오면 인터럽트가 발생하며 컨텍스트 스위칭이 일어난다.프로세스 생성과 종료실행파일이 실행되면 운영체제는 해당 프로그램의 코드영역과 데이터영역을 메모리에 로드하고빈 스택과 빈 힙을 만들어 공간을 확보하며 이 프로세스를 관리하기 위한 PCB를 만들어서 값을 초기화해준다.해당 프로세스 생성 과정은 운영체제가 부팅되고 0번 프로세스가 실행될 때 딱 한번 실행된다.그 이후에 프로세스는 새로 생성하지 않고 0번 프로세스를 복사(fork함수)해서 사용한다.새로 생성하는 것 보다 복사를 하는 게 더 빠르다.exec함수를 통해 부모를 복사한 자식 프로세스의 코드와 데이터 영역을 원하는 값으로 덮어쓴다.exit함수는 자식 프로세스가 부모 프로세스에게 정상 종료를 알리는 함수이다. / 부모 프로세스의 경우 종료부모 프로세스는 자식 프로세스의 Exit Status를 읽고 자식 프로세스를 정리한다.만약 부모 프로세스가 자식 프로세스보다 먼저 종료 되거나 자식 프로세스가 비정상적으로 종료되어 exit()신호를 주지 못해서 Exit Status를 읽지 못해 메모리에 계속 살아 있는 상태를 좀비 프로세스라고 한다.컴퓨터를 오래 켜두면 느려지는 현상이 발생하곤 하는데 메모리에 많은 프로세스가 올라오는 경우거나 좀비 프로세스가 메모리를 차지하기 때문이다.컴퓨터를 껏다키면 메모리가 초기화 되기에 다시 빨라진다.쓰레드사용자가 운영체제에게 작업을 요구하면 그만큼 프로세스 수가 증가프로세스는 메모리에 코드, 데이터, 스택, 힙영역, PCB를 할당해준다.프로세스끼리의 통신은 IPC(Inter Process Comunication)를 이용 / 해당 작업은 비용이 많이 든다.이러한 단점들을 해결하기 위해 고안된 것이 쓰레드이다.쓰레드는 프로세스 내에 존재하는 것으로 1개 이상이 있을 수 있다.쓰레드는 프로세스의 PCB, 코드, 데이터, 힙영역을 공유한다.스택은 공유하지 않고 쓰레드 마다 고유하다.한 프로세스 내에 쓰레드가 여러개 존재하기에 쓰레드 ID, TCB(Thread Control Block)가 생겼다.이제 운영체제가 작업을 처리하는 단위는 프로세스 내에 쓰레드이다.특징안전성 : 프로세스는 서로 독립적이기에 하나의 프로세스가 문제가 있더라도 다른 프로세스는 영향을 받지 않는다.반면 쓰레드는 하나의 프로세스 내에 존재하기에 해당 프로세스에 문제가 생기면 그 안에 모든 쓰레드에 문제가 생긴다.속도, 자원 : 각각의 프로세스는 서로 고유한 자원을 가진다 / 코드, 데이터, 힙, 스택영역을 전부 따로 둔다. 프로세스간의 통신을 하려면 IPC를 이용해야해서 오버헤드가 크고 속도가 느리다.반면 쓰레드는 한 프로세스내에서 스택영역을 제외한 영역은 모두 공유하기에 오버헤드가 굉장히 작다. 쓰레드간의 통신은 데이터를 공유할 수 있으니 쉽게 가능하지만 공유되는 공간에서 문제(공유자원 문제)가 발생할 수 있다. CPU 스케줄링CPU 스케줄링 개요CPU 스케줄링은 운영체제가 모든 프로세스에게 CPU를 할당/해제하는 방식을 의미한다.CPU 스케줄링에서 스케줄러(운영체제)가 고려해야할 사항은어떤 프로세스에게 CPU 리소스를 줘야하는가?CPU를 할당받은 프로세스가 얼마의 시간동안 CPU를 사용해야하는가?두 가지이다.이 두 가지 고려사항이 컴퓨터의 성능에 굉장히 큰 영향을 미친다.이 고려사항을 통해 여러 CPU 스케줄링 방식이 만들어진다.CPU를 할당받아 실행하는 작업을 CPU Burst라 부른다.입출력 작업을 I/O Burst라고 부른다.다중큐해당 프로세스의 우선순위를 보고 준비큐에 넣는다.CPU 스케줄러는 준비상태의 다중큐에 들어있는 프로세스들 중에 적당한 프로세스의 정보(PCB)를 선택해서 실행상태로 전환시킨다프로세스 정보를 담고 있는 PCB가 준비상태의 다중큐에 들어가서 실행되기를 기다리고 있고CPU 스케줄러에의해 실행상태로 전환된다.이때 CPU 스케줄러는 준비상태의 다중큐를 참조해서 어떤 프로세스를 실행시킬지 결정.스케줄링 목표리소스 사용률 : CPU 사용률을 높이는 것, I/O 디바이스 사용률 높이는 것오버헤드 최소화 : 스케줄링을 위한 계산, 컨텍스트 스위칭 오버헤드 비용 최소화공평성 : 모든 프로세스에게 스케줄링 기법에 맞춰 공평하게 CPU가 할당되어야 한다.처리량 : 같은 시간 내에 더 많은 처리를 할 수 있는 방법을 목표로 한다.대기시간 : 작업을 요청하고 실제 작업이 이루어지기 전까지 대기하는 시간이 짧은 것을 목표로 한다.응답시간 : 응답시간이 짧은 것을 목표로 한다.모든 목표를 만족할 수 없기에 사용자가 사용하는 시스템에 따라서 목표를 다르게 설정해야 한다.특별한 목적이 없을 경우, 밸런스를 유지하는게 중요.FIFO먼저 들어온 작업이 먼저 처리되는 스케줄링 방식스케줄링 큐에 들어온 순서대로 CPU를 할당받는 방식 / 해당 방식은 프로세스가 완전히 끝나야만 다음 프로세스가 실행될 수 있다.단점실행중인 프로세스가 완전히 끝나야 다음 프로세스가 실행되는데, 만약 현재 실행중인 프로세스 작업이 길고, 다음 프로세스가 엄청 짧아도, 다음 프로세스는 대기해야 한다. / 효율성(처리량, 대기시간)이 떨어진다.I/O 작업이 있다면 해당 작업이 끝날때까지 CPU가 쉬게되어 CPU 사용률이 떨어진다.스케줄링의 성능은 평균 대기 시간으로 평가된다.평균 대기 시간은 프로세스들 모두가 실행되가끼지 대기시간의 평균을 의미한다. Burst Time이 짧은게 먼저 실행되면 평균 대기 시간 짧아짐.Burst Time이 긴게 먼저 실행되면 평균 대기 시간 길어짐. FIFO알고리즘은 프로세스의 Burst Time에 따라 성능의 차이가 심하게 나기에 현대 운영체제에서 잘 쓰이지 않고 일괄처리 시스템에 쓰인다. 

감자인프런강의발자국

minme9055

[인프런 워밍업 클럽 2기 CS] 1주차 발자국

자료구조와 알고리즘시간복잡도: 알고리즘의 실행 시간을 입력 크기의 함수로 표현한 것자바스크립트 실행 환경 구축: Node.js나 브라우저를 사용해 JS 코드를 실행할 수 있는 환경 설정배열: 연속된 메모리 공간에 동일한 타입의 데이터를 저장하는 자료구조연결리스트 개념: 노드들이 데이터와 다음 노드의 참조를 가지고 연결된 선형 자료구조연결리스트 구현: 노드 클래스와 리스트 클래스를 정의하여 삽입, 삭제, 탐색 기능 구현스택 개념: LIFO(Last In First Out) 원칙을 따르는 선형 자료구조스택 구현: 배열이나 연결리스트를 사용해 push, pop 등의 연산 구현큐 개념: FIFO(First In First Out) 원칙을 따르는 선형 자료구조큐 구현: 배열이나 연결리스트를 사용해 enqueue, dequeue 등의 연산 구현덱 개념과 구현: 양쪽 끝에서 삽입과 삭제가 가능한 자료구조로, 배열이나 이중 연결리스트로 구현해시테이블 개념: 키를 값에 매핑하는 자료구조로, 빠른 검색을 위해 해시 함수 사용셋 개념과 구현: 중복을 허용하지 않는 컬렉션으로, 해시테이블을 기반으로 구현 가능운영체제운영체제 개요: 하드웨어와 사용자 간의 중개자 역할을 하는 시스템 소프트웨어운영체제의 역사: 일괄 처리 시스템부터 현대의 다중 사용자 시스템까지의 발전 과정운영체제의 구조: 커널, 시스템 콜, 사용자 인터페이스 등으로 구성된 계층적 구조컴퓨터 하드웨어와 구조: CPU, 메모리, 저장장치, 입출력 장치 등의 기본 구성요소컴퓨터의 부팅 과정: BIOS/UEFI 실행부터 운영체제 로딩까지의 단계적 과정인터럽트: 외부 이벤트나 예외 상황을 CPU에 알리는 메커니즘프로그램과 프로세스: 프로그램은 정적인 코드, 프로세스는 실행 중인 프로그램의 인스턴스멀티프로그래밍과 멀티프로세싱: 여러 프로그램의 동시 실행과 여러 프로세서를 사용한 병렬 처리PCB: 프로세스의 상태 정보를 저장하는 데이터 구조프로세스 상태: 생성, 준비, 실행, 대기, 종료 등의 프로세스 생명주기컨텍스트 스위칭: 실행 중인 프로세스를 전환하는 과정프로세스 생성과 종료: fork(), exec() 등의 시스템 콜을 통한 프로세스 관리쓰레드: 프로세스 내에서 실행되는 더 작은 실행 단위CPU 스케줄링 개요: 프로세스들 간에 CPU 시간을 할당하는 방법다중큐: 우선순위나 특성에 따라 프로세스를 여러 큐로 관리하는 스케줄링 기법스케줄링 목표: CPU 사용률 최대화, 처리량 증가, 대기 시간 최소화 등FIFO: 가장 단순한 스케줄링 알고리즘으로, 먼저 도착한 프로세스를 먼저 실행1주차 후기국비지원 교육을 듣고 취업을 하면서 CS 공부를 해 본 적이 없다보니 이름만 들어보고 개념을 모르는 내용들이 많아 학습에 대한 필요성을 느꼈는데, 때마침 인프런에서 워밍업 클럽으로 CS 코스가 열려서 신청하게 되었다.쉽게 풀어서 설명해주시는 감자 코치님의 강의 영상 따라 가다보니 기본적인 내용을 이해하는 데 큰 어려움은 없었던 것 같다.코치님 왈, 잘 모르겠으면 그림을 그려가면서 이해하라고 했는데 앞으로는 그림 그려가면서 이해해보는 것도 좋을 것 같다.미션은 강의에서 들은 내용과 추가적으로 궁금해서 찾아보았던 내용을 토대로 해결할 수 있었다.이번주는 좀 바쁘게 몰아서 들은 감이 있는데, 다음주는 차근차근 추가적인 내용도 찾아가며 강의를 듣고 싶다.

알고리즘 · 자료구조인프런인프런워밍업클럽CS운영체제자료구조알고리즘감자1주차

minme9055

[인프런 워밍업 클럽 2기 CS] 1주차 미션

운영체제 1.while(true){ wait(1); // 1초 멈춤 bool isActivated = checkSkillActivated(); // 체크 }위 코드는 1초 마다 플레이어가 스킬을 사용했는지 체크하는 코드입니다. 이 방식은 폴링방식입니다. 1초마다 체크하기 때문에 성능에 좋지 않습니다. 이를 해결하기 위한 방식으로 어떤 걸 이용해야 할까요?이러한 경우에는 인터럽트 방식을 사용하는 것이 적합합니다. 스킬이 활성화될 때만 시스템에 알림이 가므로, 지속적인 폴링 없이 효율적으로 이벤트를 처리할 수 있습니다. 2. 프로그램과 프로세스가 어떻게 다른가요?프로그램 : 실행 가능한 코드가 저장된 정적인 파일프로세스 : 실행 중인 프로그램의 인스턴스. 메모리에 로드되어 실행되는 동적인 개체 3. 멀티프로그래밍과 멀티프로세싱이 어떻게 다른가요?멀티프로그래밍 : 단일 CPU에서 여러 프로그램을 번갈아 실행하여 CPU 사용률을 높이는 기법멀티프로세싱 : 여러 CPU나 코어를 사용하여 실제로 여러 작업을 동시에 처리하는 기법 4. 운영체제는 프로세스를 관리하기 위해서 어떤 것을 사용하나요?운영체제는 프로세스 제어 블록(Process Control Block, PCB)을 사용하여 프로세스를 관리합니다. PCB는 프로세스의 상태, 프로그램 카운터, 레지스터 등의 정보를 포함합니다. 5. 컨텍스트 스위칭이란 뭔가요?컨텍스트 스위칭은 현재 실행 중인 프로세스의 상태를 저장하고, 다음에 실행할 프로세스의 상태를 복원하는 과정입니다. 이를 통해 여러 프로세스를 번갈아 실행할 수 있습니다.   자료구조와 알고리즘1. 여러분은 교실의 학생 정보를 저장하고 열람할 수 있는 관리 프로그램을 개발하려고 합니다. 이 때 여러분이라면 학생의 정보를 저장하기 위한 자료구조를 어떤 걸 선택하실 건가요? 이유를 함께 적어주세요.해시 테이블 사용이 적합합니다.빠른 검색 속도: 학생 ID나 이름으로 O(1) 시간 복잡도로 정보 검색 가능효율적인 삽입과 삭제: 새로운 학생 추가나 졸업생 삭제도 O(1) 시간 복잡도로 가능유연성: 학생별로 다양한 정보를 키-값 쌍으로 저장 2. 여러분은 고객의 주문을 받는 프로그램을 개발하려고 합니다. 주문은 들어온 순서대로 처리됩니다. 이 때 여러분이라면 어떤 자료구조를 선택하실 건가요? 이유를 함께 적어주세요.큐(Queue) 자료구조를 선택하는 것이 적합합니다.FIFO(First-In-First-Out) 원칙: 큐는 먼저 들어온 주문이 먼저 처리되는 FIFO 방식을 자연스럽게 구현간단한 구조: 간단한 주문 추가(enqueue)와 처리(dequeue) 연산공정성: 모든 주문이 들어온 순서대로 처리효율성: O(1) 시간 복잡도를 가지는 주문 추가와 처리 과정

알고리즘 · 자료구조인프런인프런워밍업클럽CS운영체제자료구조알고리즘감자1주차

빠타박스

[인프런 워밍업클럽 2기] CS전공지식_발자국_1주차

1. 개요이름: 인프런 워밍업 클럽 2기 - CS 전공지식 빠타박스 [신충식]기간: 2024.09.30 - 2024.10.04  2. 목표 및 성과설정한 목표: 자료구조와 알고리즘, 운영체제에 대한 이해 직접 말하며 학습 및 노션 기록달성한 성과: 대부분 말로 하지 못하는 몇가지 운영체제 및 알고리즘 자료구조에 대한 이해를 할 수 있었다. 3. 잘된 점 (Keep)성공적인 요소: CS 전공지식에 대한 부분을 조금더 말로써 표현할 수 있는 부분 긍정적인 : CS 전공지식 과정이 10월 18일날 종료되는 시점에서 확실히 면접 부분에서 얻어 갈 수 있는 지식 부분들이 있음.4. 개선할 점 (Problem)문제점 : 현재 정보처리기사 실기 시험이 올해 마지막인데. 이 스터디가 좀 빡세다... ; 구현 부분에서 javascript를 C++로 구현해보고 공부해야 하니까..; 일단 넘어가고 다음에 해야 할련지.. 휴.. 너무 힘들다 하면 그냥 보고 넘어갔다가 다음에 시험 끝나고 하는 방식으로 진행해보는 것도 좋을거 같다..개선이 필요한 프로세스 : 기록을 하려다 보니 시간을 너무 많이 잡는다. 또 구현부분에서 C++로 변환하는 과정에서 4시간 이상을 쏟아 붓는다.. 개선되어야 한다..  5. 다음 단계 (Try)향후 계획: 2주차 때는 좀 가볍게 보고 이후 기록을 진행하는 편으로 해야 겠다... 정보처리기사 실기가 더 중요하다 현재로써 나의 우선순위는 그것이다... 다음 2주차에서 시도할 사항: 기록은 가볍게, 구현 부분 가볍게 C++과 비교하기 (다른 사람의 코드)머릿속으로 그림그리기말로 직접 풀이 해보면서 강의해보기 역할 및 책임: 2주차 3주차 까지 마지막 하는 부분 최대한 간단히 하는 부분과 말로 직접 하면서 내것으로 만들 필요가 있을것 같다. 현재로써는.. 정처기 실기를 1트만에 합격해야 하는 의무가 있다..; 내년 까지 또 기다릴 순 없다.. 6. 기타 의견일주일 동안 학습하며이번 1주차에는 자료구조와 알고리즘 기본,LinkedList, DoubleLinkedList, Stack, Queue, Deque, Hash, 운영체제, 프로세스, 스레드, PCB, 컨텍스트스위칭, 인터럽트 등 처음부터 게임회사 취업시 필요한 면접 내용에 대해 간단히 배울 수 있었다.  -> 연결리스트를 통해 계속해서 이어나가는 점에서 인상깊었다. 아 연결리스트로 스택과 큐, 덱, 해쉬에 응용할 수 있구나 ? 라는 것을 알 수 있었다. 확실히 처음 보는 CS전공지식인데. 감자님의 강의는 정말 간단하고 보기 편하다. 1주차 미션에 대해처음 미션을 보고서 간단한 단답형 또는 서술형을 작성 할 수 있게 되어있었다. 배운 내용에 대한 이해를 위해서 말로써 해본 것들이 떠올랐고, 발표하는 느낌으로 진행했다. 가장 어려웠던 알고리즘 구현부분에서 javascript 작성한 것을 최대한 비슷하게 만들기 위해 노력했었다.미션부분에서 인터럽트에 대해 전에 들어본적은 있었으나. 세부적인 내용에 접근하려고 해보았다. 어떤 알고리즘 자료구조를 사용해봐야할지 고민을 했다. 나는 주력 언어가 C++이라서 C++로 최대한 구현하고자 했는데. STL을 활용하여 , vector 및 구조체 사용을 통해 하거나 STL로 기본적으로 구현할 수 있는 queue가 어떤식으로 사용할 수 있는지 접근해보려고 했다. 하지만. STL로 부족한 부분은 활용만 하고 직접 구현해야 하는 부분도 있었는데. 원리 참고만하고 다른사람의 구현목록을 보고 가져와서 사용하려고 했었던거 같다.그리고 Chatgpt, 뤼튼, Gemini를 사용하여 거짓된 정보를 제거하고 정말 간단한 구현에 초점을 맞췄던거 같다 이후 최적화된 구현방법이 무엇인지 풀이해볼려고 했었다.미션을 좀 이렇게 해볼걸...미션을 하면서 조금 조급한 마음이 들었다. 왜냐하면 지금 정처기 준비에 온 신경이 쏟아져있는데.이 스터디 클럽 때문에,,, 사실... 너무 오랜 시간을 쏟고 있었다...다음 주차 부터는 좀 가볍게 해야겠다. 다시 보는 한이 있더라도 중요한 것 먼저 끝내야 겠다. 하지만 미션 풀이하면서 다시한번더 되새김질 하여서 좋았다. 마음이 조급해지는 것만 조금.. 뭔가 미션에 목숨을 걸게 된다..책임감 때문에,,..?흠... 모르겠다...일단 지금 집중해야 할 것을 집중하자...

알고리즘 · 자료구조알고리즘자료구조워밍업클럽2기발자국CS-발자국cs-발자국감자

하얀종이개발자

인프런 워밍업 클럽 2기 - CS전공지식 스터디 미션 01 입니다.

CS전공지식 미션 1 운영체제while(true){ wait(1); // 1초 멈춤 bool isActivated = checkSkillActivated(); // 체크 }위 코드는 1초 마다 플레이어가 스킬을 사용했는지 체크하는 코드입니다. 이 방식은 폴링방식입니다. 1초마다 체크하기 때문에 성능에 좋지 않습니다. 이를 해결하기 위한 방식으로 어떤 걸 이용해야 할까요?스스로가 체크하지 않고, 플레이어가 스킬을 사용하면 스킬이 활성화되었다고 알려주는 인터럽트 방식을 사용할 것 같습니다. 인터럽트 방식은 다른 작업을 수행하고 있다가 하고있는 동작을 멈추고 인터럽트 서비스 루틴을 실행하여 그 인터럽트를 처리하는 방식입니다. 프로그램과 프로세스가 어떻게 다른가요?프로그램은 저장장치에 저장된 명령어의 집합으로 이루어진 애플리케이션이나 .exe 실행파일을 말하는데, 어떠한 트리거에 의해 프로그램이 저장장치에서 메모리에 올라가 운영체제 관리하에 놓이면 프로세스라고 합니다. 멀티프로그래밍과 멀티프로세싱이 어떻게 다른가요?멀티프로그래밍은 메모리에 여러개의 애플리케이션이 올라가는 것을 말하고, 멀티 프로세싱은 CPU가 여러개의 프로세스를 처리하는 것을 말합니다. 메모리의 관점에서 여러개를 처리하느냐, CPU의 관점에서 여러개를 처리하느냐로 나눌 수 있습니다. 운영체제는 프로세스를 관리하기 위해서 어떤 것을 사용하나요?운영체제는 프로세스를 관리하기 위해 프로세스 컨트롤 블록(PCB)를 활용합니다. PCB는 각 프로그램이 메모리에 올라오면 각각 생성되어 연결리스트로 연결되어 저장됩니다. 각 PCB는 프로세스의 식별자, 프로그램카운터, 레지스터 정보등을 담고 있습니다. CPU가 여러개의 프로세스를 번갈아가면서 처리할때 작업중이던 프로세스는 PCB의 정보를 업데이트하고 다른 프로세스는 PCB에서 정보를 읽어서 명령어를 실행합니다. 컨텍스트 스위칭이란 뭔가요?컨텍스트 스위칭은 CPU가 스케쥴링에 의한 시분할 처리로 프로세스를 실행하는 중에 다른 프로세스를 실행하기위해 실행중인 프로세스를 잠시 저장하고 다른 프로세스의 상태값으로 교체하는 작업을 말합니다. 이때 기존 실행중이던 프로세스의 작업내용을 PCB에 저장하고, 실행될 프로세스는 PCB에서 읽어와 CPU에 프로그램카운터 등 레지스터값이 세팅됩니다. 자료구조와 알고리즘여러분은 교실의 학생 정보를 저장하고 열람할 수 있는 관리 프로그램을 개발하려고 합니다. 이 때 여러분이라면 학생의 정보를 저장하기 위한 자료구조를 어떤 걸 선택하실 건가요? 이유를 함께 적어주세요.학생정보를 저장하기 위해서는 해시 테이블구조를 선택하겠습니다. 학생정보는학생을 식별할 수 있어야하고 학생의 여러 속성정보들을 가져야하기 때문에 학생의 식별자를 key로 가지고 학생의 정보를 value로 가지고 있으면 학생을 검색하는데에도 빠르고 O(1), 데이터를 추가하는데도 용이하기 때문입니다. 다만 해시테이블 구조는 메모리가 많이 필요하기때문에 유의해야합니다.자바 코드로 예시를 작성해봤습니다. public class Student { String name; // 이름 int age; // 나이 String major; // 전공 int grade; // 학년 // 생성자 public Student(String name, int age, String major, int grade) { this.name = name; this.age = age; this.major = major; this.grade = grade; } public static void main(String[] args) { // HashMap 생성 (키는 학생 고유 번호, 값은 학생 정보) HashMap<Integer, Student> studentMap = new HashMap<>(); // 학생 정보 추가 studentMap.put(101, new Student("김미소", 20, "컴퓨터공학", 2)); studentMap.put(102, new Student("이고은", 21, "인문학", 3)); studentMap.put(103, new Student("박현성", 19, "경영학", 1)); // 모든 학생 정보 출력 for (Integer id : studentMap.keySet()) { System.out.println("학생 고유 번호: " + id + ", " + studentMap.get(id)); } } }  여러분은 고객의 주문을 받는 프로그램을 개발하려고 합니다. 주문은 들어온 순서대로 처리됩니다. 이 때 여러분이라면 어떤 자료구조를 선택하실 건가요? 이유를 함께 적어주세요.주문은 들어온 순서대로 처리되기 때문에 선입선출(First In First Out)방식인 구조인 큐를 선택하겠습니다. 큐는 가장 먼저 들어온 주문이 먼저 처리되고 제거되기 때문에 순서대로 처리하는 방식에 적합합니다.

알고리즘 · 자료구조그림으로쉽게배우는기초컴퓨터과학(CS)감자CS전공지식인프런워밍업클럽

채널톡 아이콘