전체 글 481

[Level 3] 디스크 컨트롤러

https://programmers.co.kr/learn/courses/30/lessons/42627# 코딩테스트 연습 - 디스크 컨트롤러 하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다. 예를 programmers.co.kr 접근 힙을 활용했다. job의 시작시간이 특정 시간의 범위 내에 있을 때 힙에 넣는다. 힙에 넣을 때는 작업이 소요되는 시간을 기준으로 넣을 수 있도록 한다. 여기서 힙이 비어있을 때는 시간을 1씩 증가하도록 한다. 구현 - 먼저 지난 시간 last를 -1, 현재 시간 cur을 jobs 중에 가장 빠른 시작시간으로 초기화한다. - 이제 while문을 통해..

[SWEA 5644] 무선 충전

접근 두 명의 사용자가 이동을 할 때마다 주위에 충전할 수 있는 충전기를 모두 찾는다. 찾은 후에 성능을 기준으로 내림차순 정렬하여 두 명의 사용자가 최댓값이 되도록 충전기를 선택하도록 한다. 만약 같은 충전기 내에 두 명이 존재하면 배분을 해서 가져가야한다. 하지만 한 명이 다른 충전기 범위 내에도 존재하면 이 사용자는 다른 충전기를 선택하도록 해야한다. 구현 - 사용자 2명의 이동 경로를 move_info에 저장한다. - 충전기의 정보를 charge_info에 저장한다. - 이제 사용자들을 move_info에 기반하여 이동시키고 - 이동시킬 때마다 charge 함수로 위치를 보내서 최댓값으로 충전할 수 있는 양을 구한다. for tc in range(test_case): N = 10 M, A = ma..

[Level 2] 거리두기 확인하기

https://programmers.co.kr/learn/courses/30/lessons/81302 코딩테스트 연습 - 거리두기 확인하기 [["POOOP", "OXXOX", "OPXPX", "OOXOX", "POXXP"], ["POOPX", "OXPXP", "PXXXO", "OXXXO", "OOOPP"], ["PXOPX", "OXOXP", "OXPOX", "OXXOP", "PXPOX"], ["OOOXX", "XOOOX", "OOOXX", "OXOOX", "OOOOO"], ["PXPXP", "XPXPX", "PXPXP", "XPXPX", "PXPXP"]] [1, 0, 1, 1, 1] programmers.co.kr 접근 대기실 내에서 사람의 좌표를 기준으로 BFS를 진행하고 맨해튼 거리가 2이하인 지원자..

[Level 2] 타겟 넘버

https://programmers.co.kr/learn/courses/30/lessons/43165 코딩테스트 연습 - 타겟 넘버 n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+ programmers.co.kr 접근 전달받은 numbers의 숫자들을 더하거나 빼서 target을 만들 수 있는 경우의 수가 몇 개인지 구해야한다. 따라서 DFS를 통해 모든 경우의 수를 먼저 구했다. 구현 - DFS 내에서 현재 인덱스와 지금까지 합을 더하거나 뺄 때로 나눠서 재귀호출을 진행하였고 - idx가 N이 될 때는 모든 선택이 ..

[백준 14003] 가장 긴 증가하는 부분 수열 5

문제 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다. 입력 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (-1,000,000,000 ≤ Ai ≤ 1,000,000,000) 출력 첫째 줄에 수열 A의 가장 긴 증가하는 부분 수열의 길이를 출력한다. 둘째 줄에는 정답이 될 수 있는 가장 긴 증가하는 부분 수열을 출력한다. 접근 가장 긴 증가하는 부분 수열의 문제를 이분 탐색으로 풀면서 출력되는 부분 수..

[Level 2] 메뉴 리뉴얼

https://programmers.co.kr/learn/courses/30/lessons/72411 코딩테스트 연습 - 메뉴 리뉴얼 레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서 programmers.co.kr 접근 딕셔너리를 활용하였다. 먼저 각 손님들이 주문한 메뉴를 통해 만들 수 있는 코스 조합을 생성한다. 이 때 코스에 포함되는 메뉴의 수가 주어지기 때문에 해당 수만큼 메뉴가 포함된 조합을 생성한다. 이후 생성된 코스 조합을 딕셔너리에 key로 저장하고 value에는 해당 코스 조합의 개수를 저장한다. 이제 course의 들어있는 코스에 포함된 메뉴의 개수들 중 ..

[JS] Javascript 모듈 시스템

모듈화가 필요한 이유 모듈은 관련된 기능을 하나의 파일에서 코드로 작성하여 실행시키는 것이다. 이렇게 관련된 기능끼리 나눠서 여러 개의 파일을 만들어 모듈화를 진행할 수 있다. 모듈화는 다른 코드와의 결합도를 줄이고 재사용성을 높일 수 있다는 장점이 존재한다. Javascript의 모듈 시스템 Javascript는 본래 웹 페이지의 보조 작업을 수행하기 위해 만들어진 언어이며 모듈화 기능을 제공하지 않았다. 따라서 서로 다른 파일에서 작성한 코드이지만 스코프를 공유하여 서로의 파일에 영향을 주었다. 아래의 코드를 보자. a.js이라는 파일에서는 x를 선언하고 5로 초기화하였다. 해당 파일에서 x를 출력하면 5가 출력된다. 그리고 b.js라는 파일에서는 x를 선언하기 전에 출력하고 x에 새로운 값인 3을 ..

[SWEA 2383] 점심 식사시간

접근 먼저 계단은 무조건 2개가 존재하고 사람의 수는 10명 이하이다. 따라서 완전탐색으로 풀 수 있었다. 최대 10명의 사람들이 1번 또는 2번 계단을 고르는 모든 경우의 수를 만들고 같은 계단을 고른 사람들 끼리 그룹을 만들어 해당 그룹의 사람들이 계단을 타고 모두 내려오는 시간을 구하는 함수를 만들었다. 이를 통해 1번과 2번 계단을 선택한 사람의 소요시간을 구하고 이 중 최댓값을 찾아 최종해와 최솟값 비교를 진행한다. 구현 - DFS를 통해 사람들의 1번 또는 2번 계단을 고르는 모든 경우의 수를 구한다. - 사람들이 모두 계단을 골랐으면 1번 계단을 고른 사람과 2번 계단을 고른 사람을 나누고 이를 solve함수에 전달한다. - solve 함수에서는 해당 사람들이 모두 내려왔을 때의 시간을 구하..

[운영체제] 프로세스가 무엇일까?

프로세스의 개념 프로세스는 실행 중인 프로그램을 뜻한다. 그렇다면 프로그램은 무엇일까? 프로그램은 아직 실행하기 전 상태의 실행 파일들을 의미한다. 바탕 화면에 있는 각각의 파일들이 프로그램이 되며 더블 클릭을 했을 때 프로그램이 실행 된다. 이때 프로그램이 실행 되면 CPU 메모리를 점유하게 되고 프로세스가 진행되는 것이다. 그렇다면 프로세스를 구성하는 것이 무엇인지 알아보자. Code 영역 : 프로그램의 코드가 올라가고 프로그램을 실행 시켰을 때 실행 파일 내에 존재하는 명령어들이 올라가는 메모리 영역이다. Data 영역 : 전역 변수와 static 변수에 할당을 위한 메모리 영역이다. Heap 영역 : 개발자가 동적 할당할 때 필요한 메모리 영역이다. Stack 영역 : 함수 호출 및 함수의 인자와..

CS/운영체제 2021.08.31
728x90
반응형