본문 바로가기

전체 글71

[ QA/디버깅 ] 테스트를 위한 더미 파일(dummy file) 생성 팁 - (1) 테스트를 위해 다양한 종류/용량의 더미 파일이 필요할 때, cmd 창에서 원하는 확장자, 원하는 크기의 파일을 쉽게 생성할 수 있다. 방법은 다음과 같다. 1. cmd 창을 연다 2. 더미 파일을 생성하려는 폴더로 이동한다 3. 명령어를 입력해 더미 파일을 생성한다 예를 들어, - 바탕화면에 file 이라는 폴더를 만들고 - file 폴더에서 type이라는 하위 폴더를 만든 후 - type 폴더 안에 더미파일을 여러개 생성하고자 한다면(1) > cd desktop : 바탕화면으로 이동 (2) > cd file : 바탕화면의 file 폴더로 이동 (3) > cd type : file 폴더 내부의 type 폴더로 이동 (4) > fsutil file createnew 파일명.확장자명 바이트수 : 지정한 바이.. 2023. 5. 2.
[ 컴활1급 ] 독학 후기 2 - 파트별 공부법 필기시험 1. 교재 활용법 2. 전체적인 공부 흐름 실기시험 1. 교재 활용법 2. 전체적인 공부 흐름 3. 파트별 체크사항 4. 파트별 주의사항과 팁 이전 게시글에 이어서 컴활 파트별 공부법 정리 2021.12.29 - [Else/etc] - [ 컴활 1급 ] 독학 후기 - 필기, 실기 공부법과 팁 필기시험 1. 교재 활용법 교재는 이기적 ( 2021년 초 구매 ) 필기 기본서 세트. 2022년 버전이 새로 나온 것 같은데 구성은 비슷. 부록만 활용했는데, 저 내용만 확실히 공부하면 합격은 충분하다. 자주 출제되는 이론 120개 (+이론 당 연습문제 한 두 개), 최신 기출 5회분, 부록 안의 부록처럼 시험지 형태의 기출 4회분으로 구성되어있고 활용했던 방식은 아래와 같다. 빈출 이론 및 문제 120선.. 2021. 12. 30.
[ 컴활1급 ] 독학 후기 1 - 필기, 실기 공부법과 팁 1. 자격증 간단히 소개 2. 시험 결과 3. 준비과정 (교재 선정 등) 4. 공부법 5. 시험 관련 Tip 독학으로 컴활 1급 취득한 방법과 공부 과정 정리 (취업 목적으로 취득) 1. 컴활 시험 정리 필기, 실기시험 합격하면 취득가능 필기 19,000원, 객관식 60문제(3과목 각 20문제) 과목 : 컴퓨터 일반, 엑셀, 엑세스 합격 조건 : 세 과목 평균 60점 이상 and 과목당 최소 40점 이상 (둘 다 만족해야) 실기 22,500원, 직접 컴퓨터로 작업 수행 과목 : 엑셀, 액세스 합격 조건: 두 과목 모두 70점 이상 (참고 : https://license.korcham.net/indexmain.jsp ) 2. 시험 결과 필기 1번, 실기 3번(이틀 간격으로) 신청 필기는 연초에, 실기는 미.. 2021. 12. 29.
[ OS 기초 ] 12. I/O System and Disk Management 1. 입출력(I/O) 메커니즘이란? 2. 운영체제와 입출력(I/O) 3. 디스크 스케줄링 4. RAID 아키텍처 00 개요 컴퓨터로 게임을 할 때 아이템을 쓰기 위해서, 이동하기 위해서 마우스를 클릭하거나 키보드를 누른다. 이러한 마우스 클릭, 키보드 누름과 같은 행동은 입출력에 해당하는데, 운영체제는 이런 행동을 컴퓨터가 인식해 프로그램이 사용자가 의도한 결과(아이템 선택 또는 이동)를 화면상에 보여주는 과정에도 관여하고 있다. 이번 차시에서는 입출력 메커니즘과 이 과정에서 운영체제가 제공하는 기능들에 대해 알아보았다. 뿐만 아니라 디스크의 입출력 성능을 향상하기 위한 스케줄링 기법과 RAID(Redundant Array of Inexpensive Disks) 아키텍처에 대해 살펴보았다. 01 입출력 .. 2021. 7. 27.
[ OS 기초 ] 11. File System (2) 1. 디스크 시스템(disk system) - 파일이 저장되는 곳 2. 파일 시스템(file system) - 파일에 대한 이해와 디렉토리, 파티션 3. 디렉토리 시스템(directory structure) - 다양한 디렉토리 구조 4. 파일 보호(file protection) - 파일 보호/접근 제어 방법 5. allocation methods - 구현 및 메모리 할당 기법 00 개요 지금까지 파일의 개념과 디렉토리, 파티션 등 파일 시스템의 기본 구조에 대해 살펴보았고, 다음으로 파일 보호 구현 방법과 파일 저장 시 메모리 할당 및 관리 방식에 대해 알아보았다. 01 파일 보호 파일 보호(File Protection)란 파일에의 부적절한 접근을 막는 것으로, 다중 사용자 시스템에서 특히 중요하다. 예.. 2021. 7. 23.
[ OS 기초 ] 11. File System 1. 디스크 시스템(disk system) - 파일이 저장되는 곳 2. 파일 시스템(file system) - 파일에 대한 이해와 디렉토리, 파티션 3. 디렉토리 시스템(directory structure) - 다양한 디렉토리 구조 4. 파일 보호(file protection) - 파일 보호/접근 제어 방법 (다음 차시) 5. allocation methods - 할당 기법 (다음 차시) 00 개요 OS는 프로세스, 프로세서, 메모리뿐 아니라 파일 시스템과도 깊은 관련이 있다. 파일 시스템에 대해 살펴보기 전에 파일이란 무엇이며 파일이 컴퓨터 상 어디에 저장되는지(디스크), 우리가 파일을 읽을 때 내부에서는 어떤 작업이 진행되는지 파악한 뒤 파일과 디렉토리 시스템, 파일 보호 및 할당 기법에 대해 알아보.. 2021. 7. 22.
[ OS 기초 ] 10. Virtual Memory Management (2) 0. 가상 메모리 관리란 무엇인지, 관련된 개념 1. 가상 메모리 관리 - 하드웨어 컴포넌트 2. 가상 메모리 관리 - 소프트웨어 컴포넌트 3. 가상 메모리 관리 - 소프트웨어 컴포넌트 중 교체 전략 - FA, VA based를 중심으로 4. 기타 가상 메모리 관리 시 고려해야 할 요소들 00 개요 가상 메모리 관리 방법으로 하드웨어와 소프트웨어 컴포넌트들을 살펴봤는데 이 중에서 소프트웨어 컴포넌트의 replacement strategies(교체 전략)을 구현하는 고정 할당 기반, 변동 할당 기반의 다양한 알고리즘을 살펴본 뒤 기타 가상 메모리 관리를 위한 고려 사항들에 대해 알아보는 것으로 가상 메모리 관리 부분을 마무리할 예정. 01 교체 전략과 지역성 교체 전략 : 어떤 프로세스에 할당된 메모리를 .. 2021. 7. 21.
[ BOJ ] 1652 누울 자리를 찾아라 - python 문제풀이 1652 누울 자리를 찾아라 접근 : 가로, 세로 배열을 따로 만들고, 각 배열을 넘겨서 개수 세기. '.' 이면 카운트를 늘려가다가 'X'가 나오면 카운트가 2 이상이면 전체 개수에 +1 해주고 안되면 그냥 카운트 0으로 초기화. 주의할 점은 for문을 다 돌고 나왔을 때도 다시 한번 초기화 해주는 작업을 해줘야 한다는 것 (X가 나오지 않았을 경우를 생각해서) 풀이방법 1. 인풋으로 받은 배열(가로 버전)을 세로 버전으로 더 만들기 2. 행 기준으로 순회하면서 '.' 개수 세고 'X'나오는 순간 누울 수 있을 만큼 카운트 쌓였는지(2) 확인 후 초기화 3. 만약 행을 빠져나왔다면 다시 한번 카운트 확인해주고 초기화 하는 작업 코드 중복으로 쓰기 싫어서 두 배열을 따로 만들었지만, 굳이 세로 버전을 다.. 2021. 7. 19.
[ BOJ ] 11724 연결 요소의 개수 - python 문제풀이 11724 연결 요소의 개수 접근 : 연결리스트로 간선으로 이어진 점 정보를 저장하되 재귀로 계속 탐색해가면서 연결된 점들은 제외시켜나가기 풀이방법 1. 연결 리스트 만들기 2. 방문 여부(이미 연결시킨 점인지의 여부) 확인할 배열 v 3. 재귀로 방문한 적이 없는데, 연결되어있는 점을 찾아 v 갱신해주기 참고 python3 로 풀려면 sys를 불러와서 재귀 깊이를 따로 설정해줘야 런타임에러(Recursion Error)가 나지 않는다고 한다. (내 코드는 그렇게 설정해도 시간 초과가 난다) 그래서 pypy3로 풀었더니 통과. def find(k): global v,d v[k]= 1 # 현재 도착한 점 방문 정보 갱신 for num in d[k]: # 지금 도착한 점에서 이동할 수 있는 다른 정점 if .. 2021. 7. 19.
[ BOJ ] 7562 나이트의 이동 - python 문제풀이 7562 나이트의 이동 접근 : 좌표와 이동횟수를 정보에 담아 리스트에 담고 덱에서 하나씩 꺼내보면서 확인 풀이방법 1. 나이트가 한 번에 이동할 수 있는 좌표들을 구해 [행좌표, 열좌표, 이동회차] 원소로 만들기 2. 덱에 정보들을 담고 매번 확인하되, 만약 넣기 전에 일치하는 좌표가 있으면 바로 break ''' 시작 좌표 i,j 나이트가 한 번에 이동할 수 있는 좌표들 i-2,j-1 / i-2,j+1 / i-1,j-2 / i-1,j+2 i+1,j-2 / i+1,j+2 / i+2,j-1 / i+2, j+1 ''' from collections import deque d = [(-2,-1),(-2,1),(-1,-2),(-1,2),(1,-2),(1,2),(2,-1),(2,1)] for tc in rang.. 2021. 7. 19.
[ OS 기초 ] 10. Virtual Memory Management 0. 가상 메모리 관리란 무엇인지, 관련된 개념 1. 가상 메모리 관리 - 하드웨어 컴포넌트 2. 가상 메모리 관리 - 소프트웨어 컴포넌트 3. 가상 메모리 관리 - 소프트웨어 컴포넌트 중 교체 전략 - FA, VA based를 중심으로 (다음에...) 4. 기타 가상 메모리 관리 시 고려해야 할 요소들 (다음에...) 00 개요 앞서 지금까지 메모리 관리를 연속 할당과 비연속 할당으로 나누어 살펴보았고, 비연속 할당에서 paging system, segmentation을 공부하며 가상 메모리를 접해보았다. 시스템을 보다 효율적으로 사용하기 위해서는 이러한 가상 메모리를 잘 관리할 필요가 있기 때문에 가상 메모리 관리를 위한 다양한 방법과 전략에 대해 살펴보았다. 01 가상 메모리 관리 비연속 할당( n.. 2021. 7. 19.
[ BOJ ] 1759 암호만들기 - python 문제풀이 1759 암호만들기 접근 : 재귀로 문자열 조합 만들어가면서 지정한 길이(L) 만큼의 문자열을 완성했을 때 조건을 만족하면 결과에 추가, 아니면 중단 풀이방법 - 일단 먼저 알파벳 정렬 - 인덱스를 0부터 1씩 증가시키면서 재귀로 들어가기 - 마지막에 매번 모음, 자음 카운트 계산하지 않고, 모음 자음 개수 정보를 함께 넘겨주기 def make(s,mo,ja,idx): global stack if len(s) == L: if mo>=1 and ja>=2: print(s) return for i in range(idx,C): if al[i] in ['a','e','i','o','u']: make(s+al[i],mo+1,ja,i+1) else: make(s+al[i],mo,ja+1,i+1) L,C = map.. 2021. 7. 19.
[ BOJ ] 2309 일곱난쟁이 - python 문제풀이 2309 일곱난쟁이 접근 : 특정 인덱스의 난쟁이 선택O/선택X으로 재귀, 총합 조건을 백트래킹에 활용 풀이 방법 - 미리 난쟁이 키 순서대로 정렬 - 인덱스를 1씩 올려가면서 해당 순서의 난쟁이 선택하거나 안하거나 2가지로 재귀 - 도중에 백트래킹으로 시간 초과 방지 def find(cnt,s,idx,li): global r if r != []: # 이미 결과 찾았으면 중단 return if s > 100: # 100보다 커지는 순간 중단 return if idx == 9: # 모든 난쟁이를 지나왔을 때, if cnt == 7 and s == 100: # 조건을 만족하는 조합이 있다면 r = li # 결과로 지정하고 중단 return # idx 번째 난쟁이를 선택하거나 선택하지 않는 경우를 재귀로..... 2021. 7. 19.
[ BOJ ] 1260 DFS와 BFS - python 문제풀이 1260 DFS와 BFS 접근 : 기본 DFS, BFS 구현 문제라 별다른 전략은 세우지 않았고, 다양한 방법으로 풀어보려 했다 풀이 방법 1. 함수X while문으로 stack 활용해서 풀기 2. dfs는 함수 활용, bfs는 deque 활용하기 방법1. 함수 없이 while문 활용해서 푼 방법 N,M,V = map(int, input().split()) # 정점 i를 key, i와 연결된 정점들을 리스트에 담아 value로 갖는 딕셔너리 info info = {i:[] for i in range(1,N+1)} for _ in range(M): a,b = map(int, input().split()) info[a].append(b) info[b].append(a) # 문제 조건 : 정점이 작은 순서대로.. 2021. 7. 16.
[ SWEA ] D3 - 2806 NQueen - python 문제풀이 # info : 인덱스, 값 = 행,몇번째 인덱스에 1 넣었는지 def check(info,turn): global N,cnt if turn == N: # 종료조건 : 마지막행까지 다 퀸을 다 놓고 넘어왔는지 cnt += 1 return tmp = [0]*N for i in range(len(info)): # 열 조건 tmp[info[i]] = 1 # 왼쪽 대각선 조건 if info[i]-(turn-i)>=0: tmp[info[i]-(turn-i)] = 1 # 오른쪽 대각선 조건 if info[i]+(turn-i) 2021. 7. 14.
[ SWEA ] D3 - 5603, 4299, 11736, 11856 - python 문제풀이 5603 건초더미 r = [] for tc in range(int(input())): N = int(input()) info = [int(input()) for _ in range(N)] avg = sum(info)//N r.append("#{} {}".format(tc+1, sum([x-avg for x in info if x>avg]))) print("\n".join(r)) 4299 태혁이의 사랑은 타이밍 접근법 : 케이스 나눠서 접근 => 그냥 보유한 시간을 모두 분으로 바꿔서 빼기만 해도 풀수있음 res = [] for tc in range(int(input())): D,H,M = map(int, input().split()) r = -1 if D==11: if H==11 and M>=11: r .. 2021. 7. 14.
[ SWEA ] D3 - 1493 수의 새로운 연산 - python 문제풀이 1493 수의 새로운 연산 접근법 : 규칙은 대각선, 각 대각선의 시작숫자와 끝 숫자는 규칙이 있음 => 내가 찾으려는 숫자가 몇 번째 대각선에 있을지 찾고 거기서 몇 번째 숫자인지 더해주면 됨 # d의 인덱스:값 = (idx-1)번째 대각선:끝숫자 d = [0] #속도 줄이려는 목적 - 예전 테케에서 계산한 적 있는 대각선이면 값만 찾아올것 def find(n): global d if n 2021. 7. 13.
[ SWEA ] D3 - 1221, 10912, 4676 - python 문제풀이 1221 GNS 접근법 : 딕셔너리에서 개수만 불러와서 순서에 맞춰 출력, join 활용 order = ["ZRO","ONE","TWO","THR","FOR","FIV","SIX","SVN","EGT","NIN"] for _ in range(int(input())): d = {"ZRO":0,"ONE":0,"TWO":0,"THR":0,"FOR":0,"FIV":0,"SIX":0,"SVN":0,"EGT":0,"NIN":0} tc,n = input().split() for num in input().split(): d[num] +=1 print(tc) for o in order: print(" ".join([o]*d[o]),end=" ") print() 10912 외로운 문자 접근법 : 정렬시켜놓고 idx를 마.. 2021. 7. 13.
[ SWEA ] D3 - 3499, 5162, 1206, 5356 - python 문제풀이 3499 퍼펙트 셔플 접근법 : 규칙은 절반 나눠 번갈아가면서 출력하기때문에 for문을 절반만 돌되 짝/홀수 조건만 잘 고려해서 출력 res = [] for tc in range(int(input())): n = int(input()) c = list(input().split()) r = [] for i in range(n//2): r.append(c[i]) if n%2==0: r.append(c[n//2+i]) else: r.append(c[n//2+i+1]) res.append("#{} {}".format(tc+1, " ".join(r) if n%2==0 else " ".join(r+[c[n//2]]))) print("\n".join(res)) 이 문제는 테스트케이스가 많아서인지 리스트에 담아 줄바꿈.. 2021. 7. 13.
[ OS 기초 ] 09. Virtual Memory (2) (앞에서 이어) 비연속 메모리 할당 기법과 각각의 특징, 주소 매핑, 메모리 관리, 공유 및 보호 1. segmentation system 2. hybrid paging and segmentation system 00 개요 운영체제의 주 기능 중 하나인 메모리 관리는 크게 메모리 연속 할당과 비연속 할당으로 구분할 수 있다. 앞서 연속 할당 방법의 Uni-programming, Multi-programming(FPM, VPM)에 대해 알아보았고 대표적인 비연속 할당 방법(Paging System, Segmentation System, Hybrid) 중 페이징 시스템까지 알아보았다. 이번 차시에서는 남은 두 방법인 세그멘테이션 시스템과 페이징시스템을 세그멘테이션 시스템과 결합한 하이브리드 시스템에 대해 살.. 2021. 7. 13.
[ OS 기초 ] 09. Virtual Memory 1. 메모리 비연속 할당과 address mapping 2. Paging System - 특징, 주소 매핑, 관리 및 공유, 보호 00 개요 앞서 메모리 관리와 연속 할당 기법에 대해 살펴보았고 다음은 비연속 할당에 대한 내용이다. 비연속 할당은 메모리를 어떻게 할당하는 방법이며 연속 할당과의 차이점은 무엇인지, 대표적인 비연속 할당 기법인 paging, segmentation, hybrid paging and segmentation system에 대한 내용을 알아보았다. 01 비연속 할당과 address mapping 비연속 할당은 프로세스가 메모리에 올라갈 때 연속된 공간에 올라가는 게 아닌 띄엄띄엄 올라가는 메모리 할당 방식이다. 이때 띄엄띄엄 올리기 위해서는 프로세스를 여러 개의 단위로 분할해주는.. 2021. 7. 12.
[ OS 기초 ] 08. Memory Management 1. 메모리 관련 개념 - 종류, 계층, 워드와 블록, 주소 바인딩(address binding), Dynamic loading, Swapping 2. 메모리 할당 - 연속적 메모리 할당 : Uni programming / Multi programming (FPM, VPM)과 배치 전략 - 비연속적 메모리 할당( 다음에 다룰 것) 00 개요 운영체제는 자원을 잘 관리해 사용자와 응용 프로그램에 서비스를 제공하는 역할을 한다. 지금까지는 운영체제의 기능 중 프로세스 관리에 대해 살펴봤고, 다음에 나올 부분은 메모리 관리다. 운영체제가 메모리를 관리한다는 것은 뭔지, 어떻게 관리를 하는지에 대해 살펴보기 위한 기본적인 개념을 우선 살펴보고 메모리 할당 방식에 대해 알아보았다. 01 메모리, 메모리 관련 개념.. 2021. 7. 12.
[ SWEA ] D3 - 10804, 10200, 6692, 5789 - python 문제풀이 10804 문자열의 거울상 res = [] d = {"b":"d","d":"b","p":"q","q":"p"} for tc in range(int(input())): s = input() r = list(map(lambda x:d[x],s))[::-1] res.append("#{} {}".format(tc+1, "".join(r))) print("\n".join(res)) 10200 구독자 전쟁 테스트케이스가 많은지 매번 프린트하는것보다 마지막에 join으로 한번 하는게 훨씬 빠름 r = [] for tc in range(int(input())): N,P,T = map(int, input().split()) r.append("#{} {} {}".format(tc+1, min(P,T),P+T-N if N 2021. 7. 8.
[ SWEA ] D3 - 5515, 1208, 4466, 1229, 3142 - python 문제풀이 5515 2016년 요일맞히기 info = [31,29,31,30,31,30,31,31,30,31,30,31] r = {0:3,1:4,2:5,3:6,4:0,5:1,6:2} # 요일에 대응되는 숫자 for tc in range(int(input())): m,d = map(int, input().split()) print("#{} {}".format(tc+1, r[d%7] if m==1 else r[(sum(info[:m-1])+d)%7])) 1208 Flatten 접근법 : 정렬 -> 최대최소 차이비교 -> 반복 ... 만약 차이가 1과 같거나 작아지면 이제 의미 없는 블록 옮기기라 탈출 for tc in range(10): N = int(input()) blocks = sorted(list(map(int.. 2021. 7. 7.