전체 글 386

프로그래머스 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..

힙을 이용한 중앙값 구하기

힙을 이용한 중앙값 구하기중앙값 먼저 해보자 이번 게시글에서는머신 러닝, 데이터 분석 응용 프로그램에서 접할 수 있는 문제를 풀어보고자 한다. 어떤 소스로부터 한 번에 하나의 데이터를 연속적으로 받는다고 가정하자.그리고 매번 데이터를 받을 때마다지금까지 받은 데이터의 중앙값을 계산한다고 가정하겠다. 간단한 방법은 매번 데이터를 받을 때마다 모든 데이터를 정렬하고,그 중에서 가운데 원소를 반환하는 것이다.그러나 이러한 작업은 정렬 연산 때문에 O(N log N)의 시간 복잡도를 가진다.들어오는 데이터양이 늘어날수록 이 방식은 매우 많은 리소스를 사용하게 된다.여기서는 힙을 이용해서 최적화하는 방법을 알아보자! 1. 먼저 필요한 헤더 파일을 포함하고두 개의 힙을 사용해서 데이터를 저장할 것이다.하나는 최대힙..