게시글
질문&답변
2024.05.07
split() 질문입니다.
안녕하세요 현성님 ㅎㅎ 그렇지만 제 생각에 올바르게 나오는것은 {abc,abc,abc,abcabc} 가 나와야 올바를것 같습니다. split이라는 함수가 token이 빈 string이 되더라도 무조건 vector에 삽입하는게 옳지 않다고 생각하는데 어떻게 생각하시나요? >> abcddabcddabcdabcabcdd d 이걸 넣었을 때 {abc,abc,abc,abcabc} 이렇게 나와야 정상이라는 것이죠? 그렇게 생각할 수도 있습니다. 하지만 저런 split()과 같은 다른 언어에서도 많이 사용되는 공통 함수의 경우 로직 자체를 다른 언어 - split()함수와 동일한 결과값을 가지게 구축을 해야 합니다. 예를 들어 C++ 로 두 수를 비교해서 더 큰 결과값을 출력하는 max를 만든다면 다른 언어의 max()를 참고해서 만들 수 있겠죠? 저 또한 해당 함수를 만들 때 해당부분을 고려하면서 비교해가고 틀린점이 있나를 확인하며 만들었습니다. 자바스크립트의 경우 해당과 같이 split를 하면 const str = 'abcddabcddabcdabcabcdd'; const words = str.split('d'); console.log(words); [ 'abc', '', 'abc', '', 'abc', 'abcabc', '', '' ] 다음과 같이 되며 이는 다른 언어의 split()함수의 결과값도 동일합니다. 따라서 저렇게 빈문자열 등이 나오는게 맞습니다. 또 질문 있으시면 언제든지 질문 부탁드립니다. 좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :) 감사합니다. 강사 큰돌 올림.
- 0
- 1
- 26
질문&답변
2024.05.07
누적곱을 이용한 풀이
google님 일단은 N^2으로도 풀어서 맞는 코드는 다음과 같습니다. 저는 이렇게 풀어봤는데요. ㅎㅎ 일단은 참고 부탁드립니다. #include using namespace std; double go(const vector & nums) { int n = nums.size(); double mx = -1e9; for (int start = 0; start > n; vector nums(n); for (int i = 0; i > nums[i]; } double ret = go(nums); cout
- 0
- 3
- 43
질문&답변
2024.05.07
교안 38p char을 초기화할 때 NULL 초기화가 되지 않네요.
안녕하세요 개발자님 ㅎㅎ 저도 해당 워닝 에러는 뜹니다. 보통 워닝에러는 무시하셔도 됩니다. (사진) 컴파일 :: 컴파일 잘 됩니다. (사진) 혹시 확인 부탁드려도 될까요? 컴파일이 안된다는 말씀 아니신가요? 또 질문 있으시면 언제든지 질문 부탁드립니다. 좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :) 감사합니다. 강사 큰돌 올림.
- 0
- 1
- 31
질문&답변
2024.05.07
1-K insert 질문
안녕하세요 대기업님 ㅎㅎ 이렇게 해도 백준에서 맞다고 합니다. 또 Programiz(c++ online Compiler)로 코딩하는데 오류 안 나고 잘 작동해서 해서 질문드립니다. >> 예전에는 백준에서는 오류가 떴었는데 내부 컴파일러가 변경되었나 봅니다. 확인한 결과, 제 로컬 GCC에서는 오류가 뜨지 않습니다. insert 함수 첫 번째 인자는 이터레이터 값이 들어가야 해서 begin() + '넣어줘야 할 위치' 가 들어가야 오류가 안 나고 정상 작동한다고 봤는데 >> string의 insert() 첫번째 인자는 begin() + '넣어줘야 할 위치' -->> 이터레이터 를 넣어줘도 되구 그냥 0, 1, 2, 3 이런식으로 해당 위치를 넣어줘도 됩니다. 또 질문 있으시면 언제든지 질문 부탁드립니다. 좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :) 감사합니다. 강사 큰돌 올림.
- 0
- 2
- 30
질문&답변
2024.05.07
누적곱을 이용한 풀이
안녕하세요 google님 ㅎㅎ 해당 코드 2일전부터 제가 여러번 시도해봤는데 틀리네요... 흠... 부동소수점 초기값 max 부분 로직 조정 이렇게 3가지 파트기반으로 디버깅을 계속했는데도 잘 안되네요... 좀 더 해보고 반례나 틀린 부분 찾으면 다시 답변 달겠습니다. 부족한 답변 죄송합니다. 감사합니다.
- 0
- 3
- 43
질문&답변
2024.05.07
유후시간 관련 질문
안녕하세요 재혁님 ㅎㅎ Q1. 컨텍스트 스위칭에서 유후시간이 발생하는 것은 페이지 폴트 때문인가요 ? >> 네 맞습니다. 다만... 컨텍스트 스위칭에서 유후시간이 발생하는 것은 페이지 폴트 때문일 수도 있지만, 그것이 유일한 이유는 아닙니다. 페이지 폴트는 프로세스가 필요로 하는 데이터나 코드가 현재 물리 메모리에 없을 때 발생하며, 이로 인해 데이터를 보조 저장장치로부터 물리 메모리로 가져와야 하는 상황에서 CPU가 대기 상태에 들어가게 됩니다. 이때 발생하는 대기 시간이 유후시간의 일부가 될 수도 있습니다. 그러나 유후시간은 또한 다른 요인들로 인해 발생할 수 있습니다. 예를 들어, I/O 작업에 대한 대기, 네트워크 지연, 다른 시스템 자원에 대한 접근 대기 등도 유후시간을 초래할 수 있습니다. Q2. 컨텍스트 스위칭은 인터럽트, 시스템 콜, 프로세스 전환에서 발생하는데 그렇다면 이때 현재 진행 중인 프로세스를 중지하고 현재 프로세스까지의 상황을 PCB에 저장 후 새로운 프로세스로 전환하는데, 이것을 컨텍스트 스위칭이라고 말하는 건가요 ? >> 네 맞습니다. 컨텍스트 스위칭은 운영체제가 현재 실행 중인 프로세스(또는 스레드)를 중단하고 다른 프로세스로 전환하는 과정입니다 Q3. 또한 이 때 새로운 프로세스로 전환할 때 필요로 하는 프로세스가 물리 메모리에 없을 때 페이지 폴트가 발생하고, 이 과정에서 CPU는 대기 상태에 들어가는데, 이 대기 상태를 유후 시간이라고 하는 것이 맞나요 ? >> 네 유후시간은 페이지 폴트 때문에 발생할 수 있습니다. 또 질문 있으시면 언제든지 질문 부탁드립니다. 좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :) 감사합니다. 강사 큰돌 올림.
- 0
- 1
- 25
질문&답변
2024.05.07
세마포어의 signal() 메서드 질문
안녕하세요 재혁님 ㅎㅎ Q. 세마포어의 signal 메서드에서 공유자원 +1을 해준 후에 왜 if(s.value signal 메서드에서 s.value 를 1 증가시킨 후 if(s.value 조건을 검사하는 이유는 다음과 같습니다: 세마포어 값의 의미 : 세마포어 값 s.value 는 사용 가능한 자원의 수를 나타냅니다. 이 값이 음수가 되면, 그 절대값은 대기 중인 프로세스의 수를 의미합니다. 예를 들어, s.value 가 -5 라면 5개의 프로세스가 자원을 기다리며 대기 중입니다. 자원의 상태 확인 : signal 연산이 호출되면 s.value 는 1 증가합니다. 만약 증가하기 전에 s.value 가 0 이나 음수였다면, 증가 후에도 여전히 0 이하일 수 있습니다. 이 경우, 여전히 대기 중인 프로세스들이 존재한다는 의미이며, 이들 중 하나를 깨워 작업을 계속하도록 해야 합니다. 프로세스의 활성화 : if(s.value 조건이 참이면, 이는 아직 대기 큐에 프로세스가 남아있다는 것을 의미합니다. 따라서 이 조건을 통해 대기 큐에서 프로세스를 깨우고 작업을 계속할 수 있도록 합니다. 결국, if(s.value 조건은 signal 연산이 실행된 후에도 여전히 대기 상태인 프로세스들이 있는지 확인하고, 그런 프로세스들이 있다면 활성화시키는 역할을 합니다. 또 질문 있으시면 언제든지 질문 부탁드립니다. 좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :) 감사합니다. 강사 큰돌 올림.
- 0
- 1
- 26
질문&답변
2024.05.07
1-L 주몽 다른 풀이 질문있습니다.
안녕하세요 건학님ㅎㅎ 너무 잘푸셨네요 ㅎㅎ 사실 이 문제는 건학님처럼 투포인터로 푸는게 가장 효율적인 코드입니다. 다만 1주차이고 무식하게 푸는 방법을 알려주기 위해 저렇게 풀고 알려드린 건데 정말 잘하셨네요 ㅎㅎ 굿굿입니다. 또 질문 있으시면 언제든지 질문 부탁드립니다. 좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :) 감사합니다. 강사 큰돌 올림.
- 0
- 1
- 30
질문&답변
2024.05.07
FIFO 부분
안녕하세요 재혁님 ㅎㅎ Q1. Page Miss = 페이지 폴트인가? 아닙니다. 페이지 미스와 페이지 폴트는 엄밀하게 같은 것이 아닙니다. 페이지 미스는 더 넓은 개념으로, 요청된 페이지가 메모리에 없을 때 발생합니다. 이러한 페이지 미스는 종종 페이지 폴트를 초래할 수 있습니다. 페이지 폴트는 요청된 페이지가 메모리에 없어 운영체제가 보조 저장 장치에서 해당 페이지를 메모리로 로드해야 하는 상황을 의미합니다. 따라서 모든 페이지 폴트는 페이지 미스로 인해 발생하지만, 모든 페이지 미스가 페이지 폴트로 이어지는 것은 아닙니다. 다음의 경우는 페이지미스가 나지만 페이지폴트로 이어지지 않습니다. 1. 접근 권한 오류 페이지 미스가 발생한 상태에서, 해당 페이지에 대한 접근 권한이 없거나 잘못된 접근(예: 쓰기 금지된 페이지에 쓰기 시도)이 시도되었을 경우, 운영체제는 이를 오류로 처리하고 해당 요청을 거부합니다. 이 경우 실제로 페이지를 메모리로 로드하지 않고, 접근 권한 위반 오류를 발생시키므로 페이지 폴트로 이어지지 않습니다. 2. 성능최적화를 위해 미리 로드할 때의 페이지 미스 어떤 시스템 또는 운영체제에서 성능최적화를 위해 페이지를 실제로 사용하기 전에 미리 요청(프리페칭)하는 최적화 기법을 사용하기도 합니다. 이 때 실제 데이터 사용 전에 다른 데이터로 덮어쓰게 될 경우 페이지 미스는 발생하지만, 사용되지 않아 페이지 폴트로는 발전하지 않습니다. [참고] 참고로 페이지 히트와 페이지 미스에 대한 자세한 설명은 다음과 같습니다. 페이지 히트(Page Hit) 페이지 히트는 프로세스가 데이터나 코드를 요청할 때 해당 페이지가 이미 메모리(주로 RAM)에 적재되어 있어 바로 접근할 수 있는 상황을 말합니다. 페이지 히트가 발생하면 메모리에서 바로 데이터를 읽거나 쓸 수 있으므로, 액세스 시간이 매우 빠르고 성능이 좋습니다. 페이지 히트가 많을수록 시스템의 전반적인 응답 시간과 효율성이 향상됩니다. 페이지 미스(Page Miss) 페이지 미스는 프로세스가 데이터나 코드를 요청했을 때 해당 페이지가 메모리에 없는 상황을 말합니다. 이 경우, 운영체제는 해당 페이지를 보조 저장 장치(예: 하드디스크, SSD 등)에서 찾아 메모리로 로드해야 합니다. 이 과정은 상대적으로 시간이 많이 소요되며, 이를 페이지 폴트(page fault)라고도 합니다. 페이지 미스가 발생하면 시스템의 성능 저하가 일어날 수 있습니다. Q2. Page Hit은 해당 메모리에 바로 접근가능한가? 네 맞습니다. 페이지 히트는 프로세스가 요청한 페이지가 이미 메모리에 적재되어 있어서, CPU가 추가적인 지연 없이 바로 그 페이지에 접근할 수 있는 상태를 말합니다. 페이지 히트가 발생하면, 데이터나 코드를 빠르게 읽거나 쓸 수 있으므로 시스템의 성능과 반응 속도가 향상됩니다. 페이지 히트는 메모리 관리 및 캐싱 알고리즘의 효율성을 나타내는 중요한 지표로 사용됩니다. 또 질문 있으시면 언제든지 질문 부탁드립니다. 좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :) 감사합니다. 강사 큰돌 올림.
- 0
- 1
- 28
질문&답변
2024.05.07
LFD 예시 부분에서 질문
안녕하세요 재혁님 ㅎㅎ 이렇게 교체하면 스와핑은 단 2번만 일어나서 이게 최대의 경우 아닌가요 ? >> 네 재혁님 경우의 수가 최대는 아니구... 최소의 경우의 수이며 그렇게 하는게 맞습니다. 제 예제 같은 경우 가장 먼 미래에 참조되는 페이지와 교체한다는 부분만을 보여주려고 하다 보니 이런 실수가 나온 것 같습니다. 혼란을 드려 죄송하다는 말씀을 드립니다. 수정된 설명은 다음과 같습니다. 오프라인알고리즘 오프라인알고리즘은 가장 좋은 알고리즘이라고 일컫는 알고리즘이며 이는 1. 더 이상 참조되지 않거나 2. 가장 늦게 다시 참조되는 페이지와 지금 요청된 페이지를 바꾸는 알고리즘(LFD, Longest Forward Distance) 입니다. 페이지 참조 순서: 1, 2, 3, 4, 1, 2, 5, 1, 2, 3 메모리 최대 페이지수 : 3개 단계별 설명 초기 요청: 1, 2, 3 처음 세 페이지는 비어 있는 프레임에 하나씩 적재되며, 각각 페이지 폴트가 발생합니다. 현재 메모리: 1, 2, 3 다음 요청: 4 현재 메모리에 있는 페이지는 1, 2, 3입니다. 각 페이지의 다음 참조는 다음과 같습니다: 1은 5번째 요청에서 다시 사용됩니다. 2는 6번째 요청에서 다시 사용됩니다. 3은 10번째 요청에서 다시 사용됩니다. 3번 페이지는 가장 늦게 사용되므로 교체하기에 최적의 선택입니다. 교체: 3을 4로 교체 현재 메모리: 1, 2, 4 다음 요청: 1 1페이지는 이미 메모리에 있습니다. 현재 메모리: 1, 2, 4 다음 요청: 2 2페이지 역시 이미 메모리에 있습니다. 현재 메모리: 1, 2, 4 다음 요청: 5 현재 메모리에 있는 페이지의 다음 참조는 다음과 같습니다: 1은 8번째 요청에서 다시 사용됩니다. 2는 9번째 요청에서 다시 사용됩니다. 4는 다시 사용되지 않습니다. 4페이지는 다시 사용되지 않으므로 교체하기에 최적의 선택입니다. 교체: 4를 5로 교체 현재 메모리: 1, 2, 5 다음 요청: 1, 2, 3 1페이지와 2페이지는 이미 메모리에 있으며 해당 요청에 따라 접근됩니다. 3페이지 요청 시 (1, 2, 5 중 아무거나 바꿀 수 있음.) 교체: 5를 3으로 교체 현재 메모리: 1, 2, 3 이 알고리즘은 향후 요청을 모두 알고 있다는 가정하에 가장 효율적인 교체를 합니다. 이론적으로는 최적이지만 실제 시스템에서는 미래의 요청을 알 수 없기 때문에 이 알고리즘을 직접 구현하는 것은 불가능합니다. 대신, LRU(Least Recently Used)나 LFU(Least Frequently Used) 같은 실현 가능한 대체 알고리즘이 사용됩니다. 즉, 사용할 수 없는 알고리즘이지만 다른 알고리즘과의 성능비교에 대한 상한선을 제공합니다. 해당 설명에 대한 교안수정 및 강의 재촬영, 편집 업로드는 빠르게 오늘내로 수정될 예정입니다. 제 틀린 부분을 알려주셔서 감사하다는 말씀을 드립니다. 감사합니다. 강사 큰돌 올림.
- 0
- 1
- 28