본문 바로가기

분류 전체보기

(133)
현재 작업을 다른 브랜치에 커밋하고 싶을 때 나도 모르게 일단 작업을 시작하고 커밋하려고 보니 다른 브랜치에서 작업 중일 때가 있다. 그럴 때 유용한 것이 "stash"이다 git stash - 현재 브랜치에서 변경 이력을 전부 롤백한다. 해당 변경 이력은 임시적으로 저장된다.(어딘가에 커밋됨) git checkout git stash pop - git stash로 없앤 변경들을 현재 브랜치에 반영한다. 이 때, git stash pop을 했을 때 conflict가 발생할 수도 있다. 그건 이제 잘 처리하시길... 힘내십쇼
Docker OSError Protocol Not found 오류 도커 이미지를 만들거하 테스트하면서 OSError Protocol Not Found 오류가 났다. 찾아보니까 ubuntu:18.04를 베이스 이미지로 썼는데 이 베이스 이미지에는 netbase가 설치되어 있지 않았다. 그래서 socketio에서 위 오류가 발생했다. 해결법은 이미지 만들 때 apt-get install netbase 를 추가해서 netbase를 설치해주니 해결되었다. 아마 컨테이너 안에서 설치해도 가능하지 않을까 싶다.
sed unterminated s' command 오류 해결법 중 하나 사용되는 해결법 : 문자열 구분자를 |로 바꾸자. sed -i "s/s1/s2/" file => sed -i "s|s1|s2|" file 모든 오류가 이런 케이스는 아니겠지만 내가 겪은 케이스는 sed -i "s/str1/str2/" file 이렇게 쓰는데 이제 문자열들 사이에 \$HOME, \$PATH 이런식으로 쉘 변수가 들어가는 경우에 저 오류가 발생했다. sed -i "s/\/usr\/class\/cs140\/pintos\/pintos\/src/$HOME\/pintos\/src/" 로 썼을 땐 위 오류가 발생했고 아래로 바꾸니까 오류 없이 해결됐다. sed -i "s|\/usr\/class\/cs140\/pintos\/pintos\/src|$HOME\/pintos\/src|" 오류가 나는 이유는 ..
백준 20940번 시철이가 사랑한 수식 문제 요약 아래 두 수식의 값을 구하면 된다. $$ \begin{gather} \sum_{n=1}^N \sum_{i=1}^n \sum_{j=1}^n (gcd(i,j) \times lcm(i,j)) \\ (\sum_{n=1}^N \sum_{i=1}^n \sum_{j=1}^n gcd(i, j)) \times (\sum_{n=1}^N \sum_{i=1}^n \sum_{j=1}^n lcm(i,j)) \end{gather} $$ N과 K가 주어지는데 N은 최대 100만이고 K는 위의 값들을$\mod K$로 구하라는 뜻이다. K는 소수임이 보장된다. 풀이 먼저 첫번째 식을 보자. $lcm(i,j) = \frac{ij}{gcd(i,j)}$다. 따라서, 시그마 안의 식은 그냥 $ij$다. $$ \begin{aligne..
백준 20938번 반짝반짝 문제 요약 전구 N개가 일자로 놓여있다. 만약 i번째 전구가 고장나면 i번째 전구를 포함하고 i번째 전구와 연결된 오른쪽 전구도 모두 꺼진다. 각 전구가 꺼질 확률과 구간 수 K가 주어진다. N개의 전구를 K개의 연속 구간으로 쪼개려고 한다. 이 때, 켜진 전구의 개수의 기댓값의 최댓값을 계산해야 한다. N은 최대 2500이며, K는 최대 10이다. 풀이 먼저, $C(i,j)$를 [i,j]에서 켜진 전구들의 개수의 기댓값이라고 하자. 그러면 원하는 값은 다음과 같은 DP로 구할 수 있다. $$ \begin{gather} dp(i, j) = \text{첫번째 전구부터 i번째 전구까지를 j개의 구간으로 쪼갰을 때 최댓값} \\ dp(i, j) = \underset{k> N >> K; for(int i=1;i..
백준 20927번 Degree Bounded Minimum Spanning Tree 문제 요약 노드 갯수 N과 간선 갯수 M이 주어진다. 그리고 각 정점의 차수 제한 $b_i$가 주어진다. 차수 제한을 만족하는 스패닝트리 중에서 그 비용이 가장 작은 스패닝 트리를 출력하시오. 차수 제한을 만족하는 스패닝트리가 없다면 NO를 출력하라. N은 최대 10, M은 최대 27이다. 풀이 일단 최대 입력으로 들어왔을 때, 간선을 고르는 경우의 수는 $\binom{27}{9}$로 500만이 조금 안된다. 여기에다가 $M$을 곱해도 시간 내에 들어온다. (스패닝 트리가 되려면 간선을 N-1개 골라야 한다.) 즉, 간선을 고르고 스패닝 트리인지 확인하기 위해서 BFS나 DFS를 해도 시간 내에 충분히 돈다. BFS나 DFS는 $O(N+M)$이다. #include using namespace std; s..
백준 20926번 얼음 미로 문제 요약 가로 세로가 최대 500인 맵이 주어진다. 시작점과 도착점이 주어졌을 때, 도착점에 도착이 가능하다면 최단 시간을, 안되면 -1을 출력하면 된다. 풀이 삼성 A형 같은 느낌의 문제다. 문제에서 주어진 조건을 잘 읽고 그대로 구현을 잘해준 다음에 다익스트라를 돌리면 된다. 미끄러졌을 때, 벽으로 가거나 구멍으로 빠지면 그건 움직일 수 없는 경우이다. 조심하자. 돌에 부딪히거나 도착점에 도착해야만 멈추는 게 가능하다. 모든 점 $(i,j)$에 대해서 위, 오른쪽, 아래, 왼쪽으로 쭉 가면서 돌을 만나면 그 지점과 $(i,j)$를 이동에 드는 시간만큼의 간선으로 이어주면 된다. #include using namespace std; const int MAXN = 505; const int MAXM =..
백준 20925번 메이플스토리 문제 요약 사냥터가 N개 주어진다. 각 사냥터에는 사냥터에 진입하기 위한 최소 경험치 $c_i$와 1분마다 얻는 경험치 $e_i$가 주어진다. 그리고 각 사냥터 간 이동에 필요한 시간도 주어진다. 총 $T$분을 쓸 수 있다고 할 때, 얻을 수 있는 최대경험치를 출력하시오. 사냥터의 개수 N은 최대 200이고, $T$는 최대 1000이다. 풀이 이리저리 생각해볼 수도 있지만 일단 dp를 생각하자. $$ dp[i][j]=\text{i번째 사냥터에서 j분에 얻을 수 있는 최대 경험치}dp[i][j]=\text{i번째 사냥터에서 j분에 얻을 수 있는 최대 경험ㅊ} $$ 이러면 이제 j분에 i번째 사냥터에 있을 때 할 수 있는 선택은 두 종류가 있다. 이 사냥터에서 계속 사냥하거나, 다른 사냥터로 이동하거나. 이..