프로그래밍 456

프로그래머스 LV.2 피로도

https://school.programmers.co.kr/learn/courses/30/lessons/87946 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr푸는 방법은 크게 2가지이다. 1. 배열의 모든 경우의 수를 싹 돌아보는 것2. DFS로 푸는 것이다. 1번째의 경우에는 next_permutation 알고리즘을 써서 모든 경우의 수를 탐색할 수 있다. next_permutation함수는 std의 algorithm 라이브러리 안에 내장된 함수이다.next_permutation함수는 해당 집합의 모든 순열을 구해준다. 예를 들어 {1,2,3}이라는 원소를 가진 집합이 있다면{1,2,3}{1,3,2..

Unix/Linux Architecture

KenelOS의 핵심 기능을 모아 놓은 것이다.System callOS의 기능 중 응용프로그램이 사용하도록 허락된 기능들의 집합이다.Shell사용자와 OS 사이의 인터페이스사용자의 입력을 해석하여 커널의 함수 호출Utilities응용 프로그램 예) 웹 브라우저, 파워포인트 등  Linux의 특징높은 안정성강력한 네트워크 기능GNU 소프트웨어와 함께 배포된다.오픈소스 OS이다.오픈소스이다 보니, 다양한 플랫폼에 이식이 가능하다.리눅스는레드헷, 우번투 등의 기반이 되었다.유닉스 리눅스는 CUI가 기본이다.

프로그래머스 LV.2 점프와 순간이동

https://school.programmers.co.kr/learn/courses/30/lessons/12980 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 출발할 때 점프하는 것은 불가피하다 무조건 +1 0*2 = 0이니깐. 순간이동은 현재까지 온 거리의 2배이고 건전지를 소모하지 않기 때문에 최대한 많이 사용해야 한다. 순간이동을 했을 때 딱 맞아 떨어지지 않는 경우,즉 x*2 가 딱 맞아떨어지지 않는 경우에 ans += 1을 해주면 된다. #include using namespace std;int solution(int n){ int ans = 0; while (n > 0) {..

프로그래머스 LV.1 예산

https://school.programmers.co.kr/learn/courses/30/lessons/12982 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 단순히 현재 예산에서 최대한 뽑아 낼 수 있는 지원 가능한 부서를 세기 위해서 vector의 sort를 이용했다. #include #include #include #include #include using namespace std; int solution(vector d, int budget) { int answer = 0; sort(d.begin(), d.end()); for (int i = 0; i < d.size(); i++) { if (..

시스템 프로그래밍 능력을 갖춰야 하는 이유

시스템 프로그래밍을 알면 뭐가 좋을까? 더 많은 것을 할 수 있다.더 많은 것을 하면서 더 효율적이고 높은 성능을 가져갈 수 있다. 이렇게 막연하게 더 많은 것을 할 수 있다면, 이해가 안될 것이다.간단한 예시를 들어보겠다. A->B->C 를 통한 작업물 요구 요청은 비용이 많이 든다.따라서 A->C의 직접적인 요구는요구 비용도 적게든다. 요구 비용 뿐만 아니라, 직접적인 요구는더 많은 것을 요구할 수 있고,더 효율적이고 높은 성능을 가진다. 소프트웨어의 제약을 최소화시키므로,OS와 CS를 잘 알면 시스템 콜을 사용할 수 있으며,이를 통한 시스템 소프트웨어의 설계를 직접 할 수 있다면,중간 과정이 없기 때문에 더 높은 퍼포먼스를 가져갈 수 있다. 시스템 프로그래밍 능력을 갖추면 좋은 점 즉,시스템 프로그..

허브

허브란?허브는 물리 계층 장비이다. 통신 매체를 통해 송수신되는 메시지는 다른 호스트에게 전달되는 과정에서 네트워크 장비를 거칠 수 있다. 대표적인 네트워크 장비로 물리 계층에는 허브가 있고, 데이터 링크 계층에는 스위치가 있다. 먼저 물리 계층에서 여러 대의 호스트를 연결하는 허브의 특징을 살펴보고, 이와 관련해 허브의 동작 방식인 반이중 모드 통신에 대해 알아보겠다. 아울러 이와 반대되는 개념인 전이중 모드 통신도 함께 학습해보자. 허브에서 발생하는 충돌이라는 문제와 이를 해결하기 위한 CSMA/CD도 학습해보자. 데이터 링크 계층에는 NIC와 스위치가 있다. 스위치는 전이중 통신과 VLAN이란 특징을 가진다. 물리 계층에는 트위스티드 페어 케이블, 광섬유 케이블, 허브 허브는 반이중 통신, CSMA..

프로그래머스 LV.2 - N개의 최소공배수

https://school.programmers.co.kr/learn/courses/30/lessons/12953 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr  최대 공약술르 구하는 알고리즘으로 유클리드 호제법이라는 것이 있다.이 알고리즘을 통해 최대 공약수를 구하는 과정을 코드로 나타내면 다음과 같다. int GCD(int a, int b){ int m = max(a, b); int n = min(a, b); while (m % n != 0) { int r = m % n; m = n; n = r; } return n;} 왜 최대 ..

프로그래머스 LV.2 다음 큰 숫자

https://school.programmers.co.kr/learn/courses/30/lessons/12911 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr   테스트 케이스는 통과하지만 최적화에 실패한 코드#include #include #include using namespace std;long long binary(int n) { stack stk; string b_str = ""; while (n != 0) { if (n % 2 == 1) stk.push(1); else stk.push(0); n /= 2; } while (!(..

연산자 오버로딩과 const

const를 쓰는 이유는?멤버 변수의 값이 바뀌는 것을 방지하기 위해서최대한 많은 곳에 const를 붙일 것지역 변수에 까지도 붙일 것모든 회사가 이 코딩 표준을 따르지는 않는다. Vectro operater + (const Vector& rhs) const; const &를 사용하는 이유는?불필요한 개체의 사본이 생기는 것을 방지하기 위해서이다.멤버 변수가 바뀌는 것 역시 방지하기 위해서이다.어디에 const를 넣고 안넣고는 곰곰히 생각하면어디에 const를 넣어야 할 지 알 수 있다.생각보다 연산자 오버로딩에서 const는 생각보다 잘못쓸 가능성이 있다.왜냐하면 연산자 오버로딩을 짤 일이 별로 없기 때문이다. 잘못 사용하는 코드는 다음 예시와 같다.// 잘못된 코드의 예시std::ostream& op..