[목차]310 [프로그래머스 / Level_2 / C++] 올바른 괄호 스택을 잘 활용하면 풀 수 있는 쉬운 문제이다. #접근 방법 괄호의 쌍은 '(' 와 ')' 이다. 문자열의 길이만큼 돌아보면서 '(' 라면 스택에 담고 ')'라면 스택의 top에 '('가 위치한지 확인한다 본인은 문자형으로 넣지 않고 숫자 1이 '(' 의 의미이다. 만약 문자열의 현재 문자가 ')' 이고 stack의 top이 1이라면 ')'의 짝이 맞으니 스택의 top을 pop해준다. 만약 문자열의 현재 문자가 ')' stack의 top이 1이 아니라면 ')' 괄호가 먼저 시작된 의미이므로 더 돌아볼 필요도 없이 바로 false를 리턴해준다. 그 이유는 괄호의 짝은 순차적으로 정해진다. 즉, ')' 닫히는 괄호를 만났다면 그 전에 짝인 '(' 괄호가 바로 앞에 존재해야한다. 근데 '((((()))))" .. 프로그래머스/Level_2 2022. 5. 16. [프로그래머스 / Level_2 / C++] 모음사전 완전탐색을 이용하면 간단하게 풀리는 문제이다. #접근방법 먼저 전달받은 문자열이 사전의 몇번째 위치인지 확인하려면 사전을 미리 만들어야한다. 사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 위의 조건을 보면 알파벳 모음은 5개밖에 없고 길이도 5이하라면 완전탐색으로 사전을 만드는데 충분한 시간을 가지고 있다는 것이다. A : 1 AA : 2 AAA : 3 AAAA : 4 AAAAA : 5 AAAAE : 6 위의 순서를 보면 DFS가 살짝 보인다. 뭔가 문자열 길이가 5일때까지 A를 뒤에다가 붙여주고 길이가 5가 된다면 맨끝 알파벳을 E로 바꿔주고 그다음에는 I가 될거고 ... 대충 느낌이 올것이다. 즉, DFS 방.. 프로그래머스/Level_2 2022. 5. 15. [프로그래머스 / Level_2 / C++] 구명보트 이 문제는 그리디를 활용해서 풀면 되는 문제므로 어떻게 문제에 접근해야할지 잠깐 고민할 시간이 필요하다. 해당 문제에서 구명보트에는 단 두사람만 탈수 있다는 것에 중점을 두고 풀어야한다. 아무리 몸무게가 낮다고 해도 탈 수 있는 사람은 단 두명! 그렇기 때문에 가장 적절하게 사람들을 태우기 위해서는 "제일 무거운사람 한명"과 "제일 가벼운사람 한명"을 태워야한다. 왜냐하면 무거운 애들 두명을 태울려고 해도 limit을 넘길 경우가 무조건 있을 것이다. 그렇기 때문에 최대한 가벼운애 한명 + 무거운애 한명을 태우는게 이 문제에서 요구하는 조건인것이다. #접근방법 1. 무게를 담고 있는 벡터 오름차순으로 정렬 2. 투포인터를 활용하기 위해 시작 포인터 s와 끝 포인터 e를 생성한다. 3. s가 가리키는 원소.. 프로그래머스/Level_2 2022. 5. 14. [운영체제 11편] 메모리 할당 (연속할당 방식) 안녕하세요! 오늘은 [운영체제 11편] 메모리 할당I (연속할당 방식)에 대해서 배워보려고 합니다 !! 저번주 포스팅에서 제가 내부 단편화와 외부 단편화에 대해서 언급했습니다 ㅎㅎ 이 주제의 포스팅을 읽다보면 내부/외부 단편화가 무엇인지 확실히 이해될 것이라고 생각합니다:) 들어갑시다!! 제가 물리적 메모리는 두개의 영역으로 나뉜다고 했었던 거 기억나시나요?? 물리적 메모리(램)은 운영체제 영역과 사용자 프로세스 영역으로 나뉘게 됩니다. [운영체제 6편] 에서 언급을 했었습니다. 기억 안나시는 분들은 아래 링크 참고하세요! [운영체제 6편] 유저모드 커널모드 저번 시간에 "데드락"에 대해서 배워봤었죠?? 그리고 "IPC"에 대한 존재가 있다고 했지만 그전에 배워야할 것들이 있다고 했어요~ 흐름에 따라 포.. 남이 읽는 CS/운영체제 2022. 5. 11. [운영체제 10편] 메모리 접근 벌써 운영체제 10편을 할 차례가 되었네요~ 아직 갈 길은 멀지만 그래도 포스팅 하나를 완료하고 나면 나름 뿌듯하답니다~ 저번주에 정말 복잡한 스케줄러에 대해서 학습을 하셨으니 오늘은 조금 가볍고 직관적인 내용에 대해서 포스팅 할 예정입니다. 10편 기념으로 복잡한 주제는 잠깐 미룰게요. 사실 흐름 상 어쩔 수 없이 이 주제를 가지고 해야한답니다 :) 오늘은 메모리 관리에 대해서 알아볼려고 해요~ 메모리의 동의어는 많아요. 램, 메인 메모리, 주기억장치 뭐 이렇게 부르잖아요~ 근데 보통 메모리라고만 부릅니다! 암튼! 프로그램을 실행하면 해당 프로세스 데이터들이 어떻게 메모리 공간에 할당되는지에 대해서 학습을 하는 것이 오늘의 목표입니다! 만약 여러 프로세스들이 메모리에 상주할 때 CPU가 수행하고 있는 .. 남이 읽는 CS/운영체제 2022. 5. 8. [백준 2688번 / C++] 줄어들지 않아 dp를 활용한 문제이다. #접근방법 제일 먼저 생각해야하는 것은 각 자릿수를 나타내는 dp배열을 생성해야한다. 예를 들어, dp[1][3] 은 첫번째 자릿수의 값이 3일 때! dp[2][1] 은 두번째 자릿수의 값이 1일 때! dp[4][0] 은 네번째 자릿수의 값이 0일 때! 그렇기 때문에, 먼저 dp[1][i] 를 1로 초기화 한다. 왜냐하면 첫 번째 자릿수의 각 숫자들은 오로지 하나만 존재할 수 있다. 그리고 dp[2][i] 를 갱신해나가야하는데, dp[2][0] 이라면 "00", "01", "02", "03" ..... "08", "09" 의 경우의 수가 있다 즉, dp[1][0]~ dp[1][9]의 합과 같다. dp[2][4] 라면 "44", "45", "46", "47", "48", "49" .. 백준/DP 2022. 4. 14. [운영체제 9편] 스케줄링 종류 안녕하세요! 개발자 배씨입니다:) 자 오늘은 드디어 ~~~~ 스케줄링에 대해서 알아보려고 해요 내용이 많으니까 천천히 잘 따라오셨으면 해요. 저도 쉽게 설명하기 위해 노력할테니까!! 크흠. 제 목표는 "글을 읽는 모두를 이해 시키는 것" 입니다 ㅎㅎ 가봅시다 !! 지금까지 Context Switching(문맥교환) 이라는 말을 많이 썼어요. CPU가 어떠한 프로세스의 명령어를 수행중이다가 타이머 인터럽트에 의해서 다른 프로세스로 교체를 하잖아요? 이때 수행중이던 프로세스의 정보를 PCB에 담고 다른 프로세스의 PCB 정보를 꺼집어내서 그 프로세스를 수행시킨다고 "한 100번 정도 말씀 드렸어요" 그렇다면 이 문맥교환을 할 때 어떤 프로세스를 선택해서 교체작업이 시작될까요?? 이것이 스케줄링 입니다~ CP.. 남이 읽는 CS/운영체제 2022. 4. 13. [운영체제 8편] IPC란 무엇인가 안녕하세요! 개발자 배씨입니다~~ :) 저번 시간에는 인터럽트에 대해서 알아보았어요!! 오늘은 예전부터 언급했던 IPC 가 무엇인지 이제 배워볼게요 ㅎㅎ 지금껏 제가 설명드렸던 프로세스는 각자 독립적인 주소 공간을 가지고 수행되기 때문에 다른 프로세스와 정보를 주고 받을 수 있는 방법이 없다고 생각 하셨을거에요~ 멀티 스레드 환경에서는 서로 공유하는 공간이 있기 때문에 데이터를 주고 받을 수 있겠지만 프로세스는 독립된 구조인데 어떻게 자원을 공유할 수 있을까요? 그래서 똑똑한 조상이 운영체제가 프로세스 간의 협력 메커니즘을 제공해서 하나의 프로세스가 다른 프로세스의 수행에 영향을 미칠 수 있게 해줬답니다. 즉, 하나의 컴퓨터 안에서 실행 중인 서로 다른 프로세스 간에 발생하는 통신! IPC(Inter-P.. 남이 읽는 CS/운영체제 2022. 4. 13. [네트워크 질문] OSI 7계층 (추가내용) “라우터를 통해 IP주소(논리적인 주소)를 어떻게 지정하는건가요? 가장 빠른 경로를 선택하는 것을 라우팅이라고 하고 라우팅을 할 때 라우터를 사용합니다. 라우팅은 정적 라우팅 알고리즘(가장 빠른 경로를 정적으로 할당)과 동적 라우팅 알고리즘(네트워크 상태의 변화에 따라 경로 재구성)으로 구분할 수 있고, 정적 라우팅 알고리즘에서는 dijkstra 알고리즘이 사용됩니다. “라우터를 통해 가장 빠른 경로를 선택하고, 그 경로를 따라 가다보면 목적지 ip주소에 도착한다” 로 알고있으시면 될거 같습니다! “세션 계층은 어떤 방식으로 논리적 연결을 담당해주나요?” 세션계층을 좀 더 자세히 설명하면 통신하려는 두 컴퓨터 내의 프로세스를 연결해주는 계층입니다. 세션을 문자 그대로 해석하면 “회의”라고 해석할 수 있는.. 남이 읽는 CS 2022. 4. 13. [백준 1461번 / C++] 도서관 그리디 문제이다 #접근방법 본인은 우선순위 큐를 적절하게 사용을 해서 풀었다. 이것보다 더 나은 코드가 있다고 생각을 하지만 문제를 보자마자 직관적으로 떠올렸던 풀이방법이였기에 풀었던 방식을 설명하려고 한다. 이 문제에서 중요한 점은 마지막에 책을 갖다 놓고 나면 다시 돌아올 필요없다 라는 것이다. 그리디하게 해당 문제를 접근하기 위해서 위의 문장을 읽고 바로 떠올려야한다. " 음.. 그러면 가까이 있는 책들을 먼저 갖다놓고 제일 거리가 먼 책을 마지막에 갖다 놔야겠구나" 왜냐하면 가장 멀리 있는 놈을 마지막에 갖다 놔야 다시 돌아오는 비용이 추가로 들지 않기 때문이다. 먼저 문제에 접근할 때 우선순위 큐 두개를 생성하는데 하나는 음수, 하나는 양수값을 모아놓는다. 그리고 책의 좌표값을 입력할 때 가장 .. 백준/그리디 2022. 4. 6. 이전 1 ··· 9 10 11 12 13 14 15 ··· 31 다음 반응형