본문 바로가기

Computer Science

(45)
[BOJ 14888] 연산자 끼워넣기 N개의 수들이 들어오면 N-1 개의 주어진 +,-,*,/ 연산자로 적절히 배열해 최댓값과 최솟값을 구하는 문제다. 수들의 배열은 바뀌지 않는다.시간 복잡도는 N-1개의 연산자들을 나열하는 것이므로 (N-1)! 이 되겠다. N의 최댓값이 11이므로 N-1은 10 즉 ,10! = 3628800 이다. 완전탐색을 이용해 풀었다. 주의할 점은 최솟값이 음수가 나올 수 있다는 점이다. 이 점 때문에 몇번이나 틀렸다... 123456789101112131415161718192021222324252627282930313233343536373839404142#include #include #include using namespace std;int N;int a, b;void solve(vector &num, int p..
[BOJ 14501] 퇴사 이 문제는 상담할 수 있는 N일이 주어지고 상담을 마치는데 걸리는 시간과 상담을 했을 때 얻는 수익이 주어진다. N+1일날 퇴사를 하고자 할때 남은 N일 동안 상담을 진행하여 낼 수 있는 최대 수익을 구하는 문제다. 문제 풀이 : 각 날에 상담을 한다 / 안 한다로 구분하여 모든 경우의 수를 탐색해 최대 수익을 계산했다. 123456789101112131415161718192021222324252627282930313233343536373839#include #include using namespace std; int N;int ans; void solve(vector &v, int day, int pay) { if (day > N) { return; } if (day==N) { if (ans > N; ..
삼성 SWEA 점심 식사시간 이 문제는 주어진 맵에 사람은 1로 계단은 2이상의 정수로 표현되어 나타난다. 계단은 무조건 2개이며 사람들은 1번 계단 혹은 2번 계단으로 모두 점심 식사를 하러간다. 이 때 계단으로 표현된 2 이상의 정수는 계단을 내려가는 소요시간을 뜻한다. 계단으로 이동하는 소요시간은 계단의 위치를 x,y 사람의 위치를 a,b 라 했을 때 |x-a|+|y-b| 로 표현된다. 동시간에 사람들이 한 계단에 도착할 수 있는데 최대 3명까지밖에 계단을 한 번에 내려갈 수 없다. 즉, 3명이 계단을 내려가고 있는 중이라면 4번 째 오는 사람은 계단에서 대기해야한다. 계단 입구에 도착하면 1분 후 내려갈 수 있다고 나오는데 애초에 사람과 계단사이의 거리를 구할 때 +1을 해 놓은 상태로 하면 훨씬 편하다. 사람들이 1 또는 ..
[BOJ 16137] 견우와 직녀 https://www.acmicpc.net/problem/16137 (견우와 직녀) 이 문제는 N X N 크기의 지도에서 견우가 (0,0)에서 출발해 (N-1, N-1)까지 가는 최단경로를 구하는 문제이다. 다만 몇 가지 제약사항이 있다. 바로 까치와 까마귀가 오작교를 만들어줘야하는데 노령화(?)로 인해 직녀에게 가는 오작교를 한 번에 만들지 못한다. 그리고 만든다고 해도 지나갈 수 있는 시간이 정해져 있다. 맵은 모두 3가지의 숫자를 가진다. 0: 절벽1: 견우가 지나갈 수 있는 곳2 이상의 정수 : 이미 설치된 오작교, 정수는 오작교의 주기를 의미한다. 만약, 주기가 3인 오작교를 까치와 까마귀가 만든다면 0분, 3분, 6분, 9분 ... 에는 지나갈 수 있고 나머지 시간인 1분 , 2분, 4분, 5..
[BOJ 9095] 1, 2, 3 더하기 접근 방법 : 주어진 수를 1,2,3 으로 만들 수 있는 방법을 모두 만들어 보면 된다. 재귀를 돌리면서 가능한 경우의 수를 모두 만든다. 1234567891011121314151617181920#include using namespace std;int ans = 0;void solve(int n) { if (n == 0) { ans += 1; return; } if (n >= 1) { solve(n - 1); } if (n >= 2) { solve(n - 2); } if (n >= 3) { solve(n - 3); }}int main() { int T; cin >> T; for (int i = 1; i > n; solve(n); cout
[BOJ 1748] 수 이어 쓰기1 접근 방법 : 결과적으로 푼 방법은 1부터 1억까지 돌면서 각 숫자마다 자리수가 몇인지 일일히 세서 더한다. 123456789101112131415161718192021#include using namespace std; int len(int n) { int cnt = 0; while (n) { n = n / 10; cnt++; } return cnt;}int main() { int N; int ans = 0; cin >> N; for (int i = 1; i
[OS] 운영 체제 개요 - 운영 체제의 자원 관리 기능 운영 체제의 가장 핵심적인 기능은 자원을 효율적으로 관리하는 것이다. (1) 하드웨어 자원 : CPU, 메모리, 주변 장치 및 입출력 장치 등이 있다. CPU는 통상적으로 컴퓨터 한 대에 하나가 장착되기 때문에 서로 다른 다수의 프로세스들이 나누어 쓸 수 있도록 해야한다. (2) 소프트웨어 자원 : 응용 프로그램들과 기타 추상적인 소프트웨어 관리 프로세스 : 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램. 1. CPU 관리 방법 ( CPU 스케줄링 ) 컴퓨터에 일반적으로 하나밖에 없는 CPU를 어떤 프로세스에게 할당할 것인지를 결정하는 일. 효율적이면서 특정 프로세스가 불이익을 당하지 않도록 하는 것이 목적( 효율성, 형평성 ) 선입 선출(FCFS : First Come First Served), ..
[OS] 운영 체제 개요 - 운영 체제의 분류 운영 체제의 분류 1. 단일 작업(single tasking) vs 다중 작업 (multi tasking) (1) 단일 작업 운영 체제 한 번에 하나의 프로그램만 수행시킬 수 있는 운영 체제로 초기 컴퓨터용 운영 체제는 대개 단일 작업용 운영 체제에 해당되었다. MS 윈도즈가 나오기전 DOS 환경에서는 하나의 프로그램이 실행되는 동안 명령어를 입력할 수가 없어 한 번에 하나의 작업만 가능했다. 최근에는 대부분의 운영 체제가 동시에 두 개 이상의 프로그램을 처리할 수 있는 다중 작업을 지원한다. (2) 다중 작업 운영 체제 MS 윈도즈나 유닉스 환경에서는 하나의 프로그램의 수행이 끝나기 전에 다른 프로그램을 수행시키는 것이 가능하다. PC환경에서 다양한 프로그램들을 띄워놓을 수 있다는 점이 MS 윈도즈가 ..