블로그

재영

[인프런 워밍업 클럽 3기] CS - 3주차 미션 (자료구조와 알고리즘)

지금까지 배운 5개의 정렬 알고리즘의 장단점과 시간 복잡도를 적어주세요.버블 정렬시간 복잡도 : $O(n^2)$장점 : 이해와 구현이 간단.단점 : 성능이 좋지 않음. 선택 정렬시간 복잡도 : $O(n^2)$장점 : 이해와 구현이 간단.단점 : 성능이 좋지 않음. 삽입 정렬시간 복잡도 : $O(n^2)$장점 : 이해와 구현이 간단.단점 : 성능이 좋지 않음. 병합 정렬시간 복잡도 : $O(nlogn)$장점 : 위 알고리즘들 보다 성능이 좋다.단점 : 재귀적인 기법으로 이해하기가 어렵고, 구현도 어려움 퀵 정렬시간 복잡도평균 : $\Theta(nlogn)$최악 : $O(n^2)$대부분의 경우 피벗을 중간값으로 설정하므로 배열을 매번 반으로 가를 수 있으므로 평균적인 성능을 가진다고 봄장점 : 병합 정렬보다 더 적은 비교와 더 적은 메모리 공간을 차지하므로, 병합 정렬보다 더 좋은 알고리즘으로 평가됨단점 : 재귀적인 기법으로 이해하기가 어렵고, 구현도 어려움 메모리가 부족한 시스템에서 어떤 문제를 해결하는데 재귀로 쉽게 구현이 가능할 것 같습니다. 여러분이라면 메모이제이션과 타뷸레이션 중 어떤 걸 이용하실 건가요? 이유를 함께 적어주세요. 타뷸레이션을 선택. 메모이제이션은 재귀를 이용해 문제를 하향식으로 해결하며 복잡한 문제를 쉽게 해결할 수 있음.메모이제이션은 계산 결과를 저장하는 방식으로 단점을 해결하는데, 이때 메모리를 이용해 성능을 향상시킴그러므로, 메모리가 부족한 시스템에서는 메모이제이션을 사용하는것은 오버플로우가 발생할 수 있을것으로 예상됨. 즉, 상향식 접근인 타뷸레이션을 선택하여 메모리를 절약하고, 속도도 빠르게 해결하는 것이 좋아보임.

인프런워밍업클럽3기CS3주차미션자료구조와알고리즘

재영

[인프런 워밍업 클럽 3기] CS - 1주차 미션 (자료구조와 알고리즘)

여러분은 교실의 학생 정보를 저장하고 열람할 수 있는 관리 프로그램을 개발하려고 합니다.이 때 여러분이라면 학생의 정보를 저장하기 위한 자료구조를 어떤 걸 선택하실 건가요? 이유를 함께 적어주세요.해시테이블을 사용해시 테이블은 Key Value로 구성되며, Key 값을 고유해야함교실의 학생들을 구별할 수 있는 고유한 정보가 존재하기 때문에, (예를 들면 학번)Key를 학번으로 하며, 학생 정보를 Value에 저장하면 됨이렇게 되면 고유한 값을 통해서 학생 정보를 쉽게 찾을 수 있을 것  여러분은 고객의 주문을 받는 프로그램을 개발하려고 합니다. 주문은 들어온 순서대로 처리됩니다. 이 때 여러분이라면 어떤 자료구조를 선택하실 건가요? 이유를 함께 적어주세요.큐 Queue 를 사용고객이 주문한 순서대로 처리되어야 하므로, FIFO를 만족하는 자료구조인 큐를 사용  우리가 구현한 스택은 0번 인덱스, 즉 입구쪽으로 데이터가 삽입되고 나오는 구조입니다. 반대로 마지막 인덱스, 즉 출구쪽으로 데이터가 삽입되고 나오는 구조로 코드를 변경해주세요.import 한 LinkedList 의 프로퍼티에는 원소의 개수를 나타내는 count가 있다고 가정import { LinkedList } from "./linked.list.ts"; class Stack { list; constructor () { this.list = new LinkedList(); } push (data) { this.list.insertAt(this.list.count, data); } pop () { try { return this.list.deleteAt(this.list.count - 1); } catch (e) { return null; } } peek () { return this.list.getNodeAt(this.list.count - 1); } isEmpty () { return (this.list.count == 0); } } export { Stack };   해시테이블의 성능은 해시 함수에 따라 달라집니다. 수업 시간에 등번호를 이용해 간단한 해시 함수를 만들어봤습니다. 이번엔 등번호가 아닌 이름을 이용해 데이터를 골고루 분산시키는 코드로 수정해주세요. ( 힌트: charCodeAt() 함수를 이용 예시: name1 = "이운재"; name1.charCodeAt(0); // 51060 이운재의 0번 인덱스 ‘이’의 유니코드 출력)hashFunction(str) { let hash = 0; for (let i = 0; i < str.length; i++) { hash += str.charCodeAt(i); } return hash % 10; } 각 문자의 Unicode 값 더한 뒤, 테이블 크기로 나눈 나머지를 사용할 수 있음.하지만, 이름이 같거나, 구성이 같은 경우(이운재, 이재운)에는 충돌이 발생할 수 있으므로 추가적인 처리가 필요해보임

인프런워밍업클럽3기CS1주차미션자료구조와알고리즘

세지

워밍업클럽CS2기 1주차 미션

 운영체제 1.while(true){ wait(1); // 1초 멈춤 bool isActivated = checkSkillActivated(); // 체크 }위 코드는 1초 마다 플레이어가 스킬을 사용했는지 체크하는 코드입니다. 이 방식은 폴링방식입니다. 1초마다 체크하기 때문에 성능에 좋지 않습니다. 이를 해결하기 위한 방식으로 어떤 걸 이용해야 할까요?폴링 방식 단점을 해결한 인터럽트를 활용합니다. 인터럽트란 CPU가 명령을 내리고 작업이 완료되면 신호를 받아 인터럽트 서비스 루틴을 실행시켜 작업을 완료합니다. 비동기적으로 동작하여 성능에 이점이 있습니다.  2. 프로그램과 프로세스가 어떻게 다른가?프로그램은 저장장치에 저장된 명령문의 집합체로 저장장치만 사용하는 수동적인 존재입니다. 프로세스는 하드디스크에 저장된 프로그램이 메모리에 올라간, 실행중인 프로그램을 말하며 CPU 사용과 입출력도 수행할 수 있는 능동적인 존재입니다. 멀티프로그래밍과 멀티프로세싱이 어떻게 다른가?멀티프로그래밍은 메모리에 여러개의 프로세스가 올라와있고, 멀티프로세싱은 CPU가 여러 개의 프로세스를 처리합니다.멀티프로그래밍은 메모리에 여러 개의 프로세스가 실행 중인 상태를 말하고, 멀티 프로세싱은 CPU가 여러 개의 프로세스를 처리하는 것을 말합니다.  운영체제는 프로세스를 관리하기 위해 어떤 것을 사용하는가?프로세스가 만들어지면 운영체제는 해당 프로세스의 정보를 가지고 있는 PCB(Process Control Block)를 만들고 저장합니다. 연결리스트라는 자료구조로 저장되고 프로세스가 종료되면 연결리스트에서 해당 프로세스의 PCB를 제거합니다. 5. 컨텍스트 스위칭이란 무엇인가?프로세스 실행 중 다른 프로세스를 실행하기 위해 실행 중인 프로세스 상태를 저장하고 다른 프로세스의 상태 값으로 교체하는 것을 말한다. CPU 점유시간이 끝났거나, I/O 요청이 있거나 인터럽트가 있을 때 등 발생한다.    자료구조와 알고리즘 여러분은 교실의 학생 정보를 저장하고 열람할 수 있는 관리 프로그램을 개발하려고 합니다. 이 때 여러분이라면 학생 정보를 저장하기 위한 자료구조를 어떤 걸 선택하실 건가요? 이유를 함께 적어주세요.보통 교실의 학생 수는 정해져 있으나, 전학이나 자퇴 등의 사유로 인원 수가 변동될 수 있습니다. 하지만 그 횟수가 빈번하지 않고 데이터의 삽입, 삭제보다는 주로 참조 용도로 쓰일 것으로 생각되어 배열이 적당하다고 판단됩니다. 여러분은 고객의 주문을 받는 프로그램을 개발하려고 합니다. 주문은 들어온 순서대로 처리됩니다. 이 때 여러분이라면 어떤 자료구조를 선택하실 건가요? 이유를 함께 적어주세요.들어온 순서대로 주문을 처리하고, 주문이 변경이나 취소되는 경우를 고려하여 이중연결리스트를 활용한 큐 적당하다고 생각합니다.

알고리즘 · 자료구조인프런워밍업클럽운영체제자료구조와알고리즘인프런워밍업클럽미션CS

채널톡 아이콘