TIL💡(277)
-
C++로 코딩테스트를 풀 때 추가하는 구문의 목적
C++로 알고리즘을 풀 때 실행 속도를 높이기 위해 아래와 같은 구문을 추가한다. ios_base::sync_with_stdio(false); cin.tie(null); 첫 번째 코드 ios_base::sync_with_stdio는 c의 stdio와 cpp의 iostream을 동기화시켜주는 역할을 한다. 이 때 iostream과 stdio의 버퍼를 모두 사용하기 때문에 delay가 발생한다. ios_base::sync_with_stdio(false) 코드를 작성함으로써 동기화를 비활성화해준다. 이로 인해 C++(iostream)만의 독립적인 버퍼가 생성되어 C의 버퍼와 병행하여 사용할 수 없게 된다. 그러나 동기화를 하지 않기 때문에 실행속도는 빨라진다. 알고리즘 문제를 풀 때는 대부분 싱글 스레드이기 ..
2022.05.03 -
최단 경로 문제
최단 경로 문제 최단 경로 문제란 두 노드를 잇는 가장 짧은 경로를 찾는 문제다. 가중치가 있는 그래프(Weighted Graph)에서는 Edge의 가중치의 합이 최소가 되도록 하는 경로를 찾으려는 것이 목적이다. 최단 경로 문제에는 다음과 같은 유형이 있다. 단일 출발 최단 경로: 단일 노드 𝑣에서 출발하여 그래프 내의 모든 다른 노드에 도착하는 가장 짧은 경로를 찾는 문제 단일 도착 최단 경로: 모든 노드들로부터 출발하여 그래프 내의 단일 노드 𝑣로 도착하는 가장 짧은 경로를 찾는 문제. 단일 출발 최단 경로를 거꾸로 뒤집은 것과 같다. 단일 쌍 최단 경로: 주어진 꼭짓점 𝑢와 𝑣에 대해 𝑢에서 𝑣까지의 최단 경로를 찾는 문제 전체 쌍 최단 경로: 그래프 내 모든 노드 쌍들 사이의 최단 경로를 찾는 ..
2022.05.02 -
[백준] 1931: 회의실 배정
https://www.acmicpc.net/problem/1931 1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net 정말 전형적인 Greedy Algorithm 문제이다. 그러면 어떤 내용을 기준으로 잡아야하는지 고민해보아야 한다. 회의가 시작한 순으로 정렬을 하면 최대 회의의 수를 구할 수 없다. 왜냐하면 회의는 일찍 시작했으나 늦게 끝나는 경우가 있기 때문이다. 따라서 회의가 끝나는 순대로 오름차순 정렬을 하고, 최대한 앞에서부터 채운다는 느낌으로 회의의 수를 세면 된다. 정렬 기준으로 회의의 종료 시간을 설정하기 위해서 회의에 대한 정보를 저장할 때 vector에 first에 종료 시간을, second에 시작 시간을 설정..
2022.05.02 -
[클린코드] 동시성
평소 부주의하게 다중 스레드를 사용했던 경험이 있어서 마침 클린코드에 언급된 동시성 내용을 정리해보았다. 동시성이 필요한 이유? 동시성은 결합을 없애는 전략이다. 결합을 풀어내면 애플리케이션의 구조와 효율이 극적으로 나아진다. 하지만 구조적 개선만을 위해 동시성을 채택하는 것은 아니다. 어떤 시스템은 응답 시간과 작업 처리량 개선이라는 요구사항으로 인해 직접적인 동시성 구현이 불가피하다. ex1. 단일 스레드 수집기는 웹 소켓에서 입출력을 기다리는 시간이 아주 많다. 한 번에 한 사이트를 방문하는 대신 다중 스레드 알고리즘을 이용하면 수집기 성능을 높일 수 있다. ex2. 한 번에 한 사용자를 처리하는 시스템이 있다고 하자. 한 사용자를 처리하는 시간은 1초다. 사용자가 소수라면 시스템이 아주 빨리 반응..
2022.05.02 -
[백준] 3687 성냥개비
https://www.acmicpc.net/problem/3687 3687번: 성냥개비 각 테스트 케이스에 대해서 입력으로 주어진 성냥개비를 모두 사용해서 만들 수 있는 가장 작은 수와 가장 큰 수를 출력한다. 두 숫자는 모두 양수이어야 하고, 숫자는 0으로 시작할 수 없다. www.acmicpc.net 네이버 기출 문제와 유사했었던 문제라서 풀어보고, 분석해보았다. 이러한 성냥개비 문제는 이전에 많이 접했어서 한 눈에 DP 문제라는 것은 파악하기 용이했다. DP 풀이의 핵심은 인덱스의 기준을 어떤 것으로 삼을 것인지가 관건이다. 이를 파악하기 위해서는 어떤 연산이 중복, 반복되는지를 파악해야 한다. 가끔 더 편하게 문제를 풀기 위해서는 인덱스로 접근되기에 적절한 기준을 찾아도 좋다.(야매팁) 덧붙여지는..
2022.05.02 -
도커 이미지와 컨테이너
컨테이너를 외부에 노출 컨테이너는 가상 머신과 마찬가지로 가상 IP 주소를 할당받는다. 기본적으로 도커는 컨테이너에 172.17.0.X의 IP를 순차적으로 할당한다. 컨테이너를 새롭게 생성한 후 ifconfig 명령어로 컨테이너의 네트워크 인터페이스를 확인한다. NAT IP ✔︎ NAT = Network Address Translation ✔︎ 사설 네트워크에 속한 여러 개의 호스트가 하나의 공인 IP 주소를 사용하여 인터넷에 접속하기 위해 사용 ✔︎ 즉, 외부망과 내부망을 나눠주는 기능 참고 https://blog.voidmainvoid.net/319 NAT IP란? NAT는 Network Address Translation의 줄임말 입니다. NAT는 사설 네트워크에 속한 여러 개의 호스트가하나의 공인..
2022.04.28