목록분류 전체보기 (62)
Live Today
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/3kyeg/btrYYqevefY/t9l4UaYidlvaeh0fMXwg8k/img.png)
https://www.acmicpc.net/problem/2902 2902번: KMP는 왜 KMP일까? 입력은 한 줄로 이루어져 있고, 최대 100글자의 영어 알파벳 대문자, 소문자, 그리고 하이픈 ('-', 아스키코드 45)로만 이루어져 있다. 첫 번째 글자는 항상 대문자이다. 그리고, 하이픈 뒤에는 반드 www.acmicpc.net import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main_bj_2902_KMP는왜KMP일까 { public static void main(String[] args) throws IOException{ BufferedReader br ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cElCvp/btrYAnpgSJh/lqQ4fpdXHNa5fK1DqCm4LK/img.png)
왜 프로세스 동기화가 필요한가요 ? 결국, 공유하는 하나의 자원에 대해서, 여러 프로세스가 동시에 접근할 때 시간적인 차이로 생길 수 있는 데이터의 불일치 문제가 존재할 수 있다. 이러한 문제를 해결하고자 하는 것이 프로세스 동기화(Process Synchroniztion)이다. Race Condition (경쟁 조건) : 여러 프로세스가 공유 자원에 동시에 접근할 때 실행 순서에 따라 실행 결과가 달라질 수 있는 상황 Q. 경쟁상태(Race Condition)이란 무엇인가요? 프로세스가 어떤 순서로 데이터에 접근하느냐에 따라 결과값이 달라질 수 있는 상황을 말합니다. 둘 이상의 입력이나 조작이 동시에 일어나 의도하지 않은 결과를 가져오는 경우를 말합니다. 동시 접근 시 자료의 일관성을 해치는 결과가 나..
🔹인터럽트란 ? CPU가 특정 기능을 수행하는 도중에 급하게 다른 일을 처리하고자 할 때 사용할 수 있는 기능이다. 대부분의 컴퓨터는 한 개의 CPU를 사용하므로 한 순간에는 하나의 일 밖에 처리할 수 없기 때문에 어떤 일을 처리하는 도중에 우선 순위가 급한 일을 처리할 필요가 있을 때 대처할 수 있는 방안이 필요하다. 예를 들면, 키보드의 키를 하나 누르면, 눌려진 키 코드 값이 키보드 버퍼에 입력된 후 CPU에 인터럽트가 걸린다. 그럼 현재 처리하던 작업에 대한 정보를 수집하여 저장한 뒤에 인터럽트 서비스 루틴(Interrupt Service Routine)을 수행한다.(이 경우에는 키보드 버퍼에 있는 키 코드 값을 가져가는 일을 한다.) 이렇게 인터럽트 처리를 마친 후에는 다시 이전에 처리하던 작업..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cSme3L/btrX4iP2RM3/YuKfpkkRbRSCHkAYyI8TYK/img.png)
https://www.acmicpc.net/problem/1445 1445번: 일요일 아침의 데이트 첫째 줄에 숲의 세로 크기 N과 가로 크기 M이 주어진다. N과 M은 3보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 숲의 지도가 주어진다. 숲의 지도는 S, F, g, . 만으로 이루어져 있 www.acmicpc.net 💡 PriorityQueue 자료구조를 활용해 다익스트라로 해결 ! 현재 위치의 좌표와 쓰레기를 지나쳐 온 칸의 개수와 쓰레기 옆을 지나온 칸의 개수를 가지고 있는 클래스를 만들었다. compareTo()는 쓰레기를 지나쳐온 칸의 개수가 같다면 쓰레기 옆을 지나친 칸의 개수가 작은 것을 반환한다. static class Point implements Comparable..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/zFlvI/btrX6oIAaj8/n6uuczNdWtcgq63RbqecYK/img.png)
https://www.acmicpc.net/problem/2493 2493번: 탑 첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1 www.acmicpc.net 💡 스택 자료구조를 이용해 풀기 ! N은 1 이상 500,000 이하 시간 제한 : 1.5초 🔹 틀린 이유 : N의 범위와 시간 제한 조건을 제대로 확인하지 못해서 시간초과 문제풀이를 하게 됐다. 문제 풀이 방법이 바로 생각 났다고 섣불리 코드부터 짜지 말자..!! 문제에서 주어진 변수의 범위와 시간 제한을 확인 후 시간복잡도를 계산 후 문제 풀이를 시작하자. 내가 푼 로직은 반복문이 중첩되어 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bZElHO/btrX2XS1Mmt/U4Pujp1KZZh5KDWOZpwkA1/img.png)
https://www.acmicpc.net/problem/12919 12919번: A와 B 2 수빈이는 A와 B로만 이루어진 영어 단어 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다. 이런 사실에 놀란 수빈 www.acmicpc.net 💡 이 문제의 키포인트는 S를 T로 바꿀 수 있는가의 로직이 아니라 T를 S로 바꿀 수 있는지 확인해야 시간초과가 나지 않는다. 💡시간 초과 난 풀이는 S를 가지고 알파벳 “A” 와 “B”를 추가해가며 dfs로 풀었다. 📍Java 문자열 자르기 - substring() String str = "Hello"; str.substring(1); // ello s..
✅ Context Switching 이란 ? 현재 진행하고 있는 Task(Process, Thread)의 상태를 저장하고 다음 진행할 Task의 상태 값을 읽어 적용하는 과정을 말합니다. 멀티프로세스 환경에서 CPU가 어떤 하나의 프로세스를 실행하고 있는 상태에서 인터럽트 요청에 의해 다음 우선 순위의 프로세스가 실행되어야 할 때 Context Switching이 일어남 💡 즉, 기존의 프로세스의 상태 또는 레지스터 값(Context)을 저장하고 CPU가 다음 프로세스를 수행하도록 새로운 프로세스의 상태 또는 레지스터 값(Context)를 교체하는 작업을 Context Switch(Context Switching)라고 한다. ✅ 왜 Context Switching이 필요한가? Computer가 매번 하나..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bfHAqY/btrXHO9LsNL/74DHS2WGNfD34oGkFu7WK0/img.png)
프로세스 메모리 구조 코드(Code) 영역 프로그램 코드 자체 주기억장치에 CPU가 해석할 수 있는 Binary Code 상태로 올라가게 되는데 이 영역을 뜻한다. CPU에서 수행할 수 있는 기계어 명령 형태로 변환되어 저장되는 공간 데이터(Data) 영역 프로그램의 전역 변수(Global Variable)나 정적 변수(Static Variable)의 할당을 위해 존재 스택(Stack) 영역 지역 변수(Local Variable) 할당과 함수 호출 시 전달되는 인수(Argument) 값 위해 존재 호출된 함수의 수행을 마치고 복귀할 주소 및 데이터(지역변수, 매개변수, 리턴값 등)를 임시로 저장하는 공간 힙(Heap) 영역 동적 할당 프로그래머가 필요할 때마다 사용하는 메모리 영역 🌐 참고 링크 http..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/RMvb8/btrXBAKmgDz/yat1HV6auKPK1JJAqGbHPk/img.png)
프로세스는 프로세스에 의해서 만들어진다. 부모 프로세스 (Parent Process) : 다른 프로세스를 생성한 프로세스 자식 프로세스 (Child Process) : 다른 프로세스에 의해 생성된 프로세스 형제 프로세스 (Sibling Process) : 부모가 동일한 프로세스들 간의 관계 프로세스 트리 (Process Tree) : 부모 - 자식 관계를 트리형태로 나타낼 수 있음 ✅ 프로세스 생성 단계 자식은 부모의 공간을 복사한다. 이를 복제 생성된다고 말한다. 부모의 공간이란 프로세스 문맥을 의미한다. Address Space(OS data, binary) & code, data, stack + PC까지 복제를 해서 태어난다. 그리고 자식 프로세스는 복제한 공간에 새로운 프로그램을 올린다. 즉 자식..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/yQ4HT/btrXnvwrcu5/DtuLzsVsgIAQGtOTLpO99k/img.png)
1. new : 프로세스 생성중 프로세스를 생성하고 있는 단계로 커널 공간에 PCB가 만들어진 상태 2. ready : 프로세스가 CPU를 기다리는 상태 아직 CPU를 받지는 않았지만 CPU를 할당 받으면 바로 실행 가능한 상태 ready상태를 가지는 여러개의 프로세스들이 존재할 수 있음 프로세스가 메모리에 적재된 상태로 실행하는데 필요한 자원을 모두 얻은 상태 3. running : 프로세스가 CPU를 할당받아 명령어를 수행중인 상태 일반적으로 CPU가 하나이기 때문에, 여러 프로세스가 동시에 실행되도 실제로 실행중인 프로세스는 매 시점 하나 뿐임 4. blocked : 프로세스가 CPU를 할당 받아도 당장 실행할 수 없는 상태 현재 프로세스가 I/O작업 등을 처리하는 상태를 의미 5. terminat..