전체 글
-
운영체제 ① (KOCW 반효경 교수님 강의)OS 2022. 7. 14. 06:30
운영체제를 혼자 학습하려다 보니 한계를 느껴서 검색하다가 블로그에 후기가 많은 KOCW의 반효경 교수님의 2014년도 강의를 듣게 되었다! 수업을 들어보니 확실히 홀로 공부하는 것보다 더 깊고 자세하게 배울 수 있던 것 같다. 이런 양질의 교육을 온라인으로 그것도 무료로 듣게 되다니 너무 감사하다! http://www.kocw.net/home/search/kemView.do?kemId=1046323 운영체제 운영체제는 컴퓨터 하드웨어 바로 위에 설치되는 소프트웨어 계층으로서 모든 컴퓨터 시스템의 필수적인 부분이다. 본 강좌에서는 이와 같은 운영체제의 개념과 역할, 운영체제를 구성하는 각 www.kocw.net 이 글은 반효경 교수님의 강의를 듣고 잊지않고 공부하기 위해 작성되었다. Ch1. Introdu..
-
백준 3190) 뱀 (골드.4)알고리즘/백준 2022. 7. 13. 23:10
https://www.acmicpc.net/problem/3190 3190번: 뱀 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임 www.acmicpc.net 시뮬레이션 문제로 조건에 따라 이동시키는 문제이다. 조건을 확인하면 다음과 같다. 1) 뱀은 0, 0 위치에서 시작하여 처음엔 오른쪽으로 이동한다. 2) 방향조건이 D일 경우 오른쪽, L일 경우 왼쪽으로 이동한다. 3) 시간조건은 처음 이동을 시작할 때부터 방향을 바꿀때 까지의 시간을 나타낸다. 4) 이동할 칸에 사과가 있으면 뱀의 꼬리는 줄어들지 않는다. 5) 이동할 칸에 사과가 없으면 뱀의 꼬리는 한..
-
백준 14499) 주사위 굴리기 (골드.4)알고리즘/백준 2022. 7. 13. 22:56
https://www.acmicpc.net/problem/14499 14499번: 주사위 굴리기 첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x, y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지 www.acmicpc.net 단순 구현의 문제라고 생각하고 문제에 주어진 주사위 모양을 참고하여 구현하였다. 조건을 확인하면 다음과 같다. 1) 이동 방향이 동서북남 2) 지도상 좌표의 숫자가 0일 경우 이동한 주사위의 밑면의 숫자를 복사할 것 3) 지도상 좌표의 숫자가 0이 아닐 경우 주사위 밑면에 지도상의 숫자를 복사하고 지도상 좌표의 수는 0으로 만들 것..
-
알고스팟 : 울타리 잘라내기 (분할정복)알고리즘 2022. 7. 4. 22:37
처음부터 모두 조회하면서 사각형 넓이를 계산하는 완전탐색 실행시 시간초과가 발생하는 문제이다. 이 부분을 해결하기 위해서는 왼쪽과 오른쪽 부분을 나눠서 진행하는데 (분할 정렬처럼) 왼쪽부분에서 가장 큰 사각형과 오른쪽부분에서 가장 큰 사각형 넓이, 가운데에서 가운데 두개의 영역(넓이2 * 둘중에 낮은 높이), 가운데영역을 포함하여 양쪽으로 넓어지면서 계산한 사각형 중에 가장 큰 사각형을 비교하여 가장 큰 넓이를 반환해주여야 한다. c = int(input()) def max_sqare(left, right, fence): # 기저 사레 : 같은 값이면 가로 1 * 높이가 최대 직사각형 if left == right : return fence[left] # 가운데를 중심으로 나아간다 mid = (left ..
-
알고스팟 : 쿼드 트리 뒤집기 (분할정복)알고리즘 2022. 7. 4. 22:33
이미 압축되어 출력된 부분을 다시 원래 모양대로 풀고 나서 뒤집고 다시 압축하려고 하면 초과가 발생하는 문제이다. 이미 압축되어있는 버전에서 부분 별로 위와 아래만 바꿔주도록 적용해야 한다. c = int(input()) def reverse(s, idx): if s[idx] == 'w' or s[idx] =='b' : return s[idx] # x로 시작한다는 의미이므로 한칸 앞으로 idx +=1 upperLeft = reverse(s, idx) idx += len(upperLeft) upperRight = reverse(s, idx) idx += len(upperRight) lowerLeft = reverse(s, idx) idx += len(lowerLeft) lowerRight = reverse..
-
알고스팟 : 시계 맞추기 (완전 탐색, 최적의 해)알고리즘 2022. 7. 3. 21:30
완전탐색으로 시계를 모두 12시로 맞추는 모든 경우의 수를 구하고 그 중 스위치를 누른 최소의 갯수를 구하려고 했으나 시간초과가 발생하였다. import math inf = math.inf switches = [ [0, 1, 2], [3, 7, 9, 11], [4, 10, 14, 15], [0, 4, 5, 6, 7], [6, 7, 8, 10, 12], [0, 2, 14, 15], [3, 14, 15], [4, 5, 7, 14, 15], [1, 2, 3, 4, 5], [3, 4, 5, 9, 13] ] def is_aligned_clock(clock) : for time in clock : if time != 12 : return False return True def push_switch(clock, sw..
-
알고스팟 : 게임판 덮기 (완전탐색, 경우의 수)알고리즘 2022. 7. 3. 16:22
이 문제는 경우의 수를 모두 구하는 문제로 완전탐색을 이용한다. 여기서 주의할 점은 중복되는 경우의 수를 제외하기 위해서 맨 위쪽 부터 탐색하여 채워지지 않은 부분을 찾아내는 것이다. 제일 먼저 coverType을 만드는데 [dy][dx]타입으로 세 점을 작성하였으며 나중에 적용할 때는 행, 열의 순서에 맞춰 board[y + dy][x + dx]를 적용해야 하는 점에 유의하자. c = int(input()) coverType = [ [[0,0], [0,1], [1, 0]], [[0,0], [0, 1], [1, 1]], [[0,0], [1, 0], [1,1]], [[0,0], [1,0], [1,-1]] ] def isCoverable(x, y, type, board): for dy, dx in type:..
-
알고스팟 : 소풍 (완전탐색, 조합)알고리즘 2022. 7. 3. 14:02
탐색가능한 모든 조합의 수를 계산 하는 문제로 완전탐색 을 이용해서 문제를 해결할 수 있었다. 여기서 중요한 것은 중복으로 계산되는 것을 제외하여야 한다는 것이다. 즉 (1,0)과 (0, 1)은 서로 같은 사람끼리 짝을 이루었으므로 같은 경우라고 인지하여야 한다. 이 부분을 해결하기 위해서 숫자 순서대로 먼저 오는 답 하나만 계산할 도록 first 인자를 이용해서 선택되지 않은 학생중에서 가장 번호가 빠른 학생의 짝을 찾도록 하였다. c = int(input()) def countPair(): cnt = 0 first = -1 for i in range(n): if not visited[i]: first = i break if first == -1 : return 1 for i in range(first..