알고리즘과 언어/c++
-
C++ 프로세스 메모리 측정 방법 (링크)알고리즘과 언어/c++ 2022. 10. 7. 17:31
리눅스에서 1개의 프로세스 메모리를 측정해야하는 일이 있었다. 주로 top 명령어 등을 통해 서버 내 전체 메모리 사용량을 구하는 방법은 많았지만 1개의 프로세스에 해당하는 메모리 사용량을 구하는 방법은 찾기 어려웠다. 스크립트를 만드는 방법도 있었지만, 1초만에 끝나는 프로세스이기에 스크립트로 프로세스를 돌린 후, pid를 찾고, 0.1초씩 기록하는 것이 정확한 방법일지 고민이 있었다. 많은 메모리 프로파일러 툴이 있었지만 GUI 지원가능한 리눅스가 아니면 가장 peak를 치는 지점과 평소 지점을 비교하기 찾기 힘들어보였다. 그러던 중 다음 C++ 내에 소스를 주입해서 하나의 프로세스를 측정하는 방법을 발견했다. /proc/self/status 는, 어떠한 임의의 pid를 가진 프로세스가 자신의(sel..
-
C++ ) 백준 2003 수들의 합 2알고리즘과 언어/c++ 2022. 3. 9. 19:34
문제 https://www.acmicpc.net/problem/2003 2003번: 수들의 합 2 첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다. www.acmicpc.net 내 풀이 투 포인터를 사용해서 풀었다. 투 포인터란 front와 back 포인터를 설정한 후에 front와 back을 한칸씩 이동하며 조건과 부합하는지를 찾는 알고리즘이다. 이 문제는 '연속하는' 수들의 합을 찾기 때문에 front와 back 사이의 모든 값들을 더한 SUM을 갱신하는 투 포인터와 알맞다고 할 수 있다. O(1)의 시간복잡도를 가지므로..
-
C++ ) 백준 17090 미로 탈출하기알고리즘과 언어/c++ 2022. 2. 17. 04:21
문제 https://www.acmicpc.net/problem/17090 17090번: 미로 탈출하기 크기가 N×M인 미로가 있고, 미로는 크기가 1×1인 칸으로 나누어져 있다. 미로의 각 칸에는 문자가 하나 적혀있는데, 적혀있는 문자에 따라서 다른 칸으로 이동할 수 있다. 어떤 칸(r, c)에 적힌 문 www.acmicpc.net 풀이 3 Try만에 문제를 풀 수 있었다. 처음에는 R * C 의 모든 칸을 시작점으로 방향을 따라가도록 했다. DFS처럼 사방으로 퍼지지 않고 방향이 정해져 있기에 연산이 현저히 많을 것이라고 생각하지 않았었다. 그러나 2 try에서 모두 타임아웃이 나는걸 확인하며, CheckMap을 만들어 메모이제이션을 이용하여 풀었다. (메모이제이션에 대해 궁금하면 DP에 대해 찾아보세..
-
C++ ) 백준 3055 탈출알고리즘과 언어/c++ 2022. 2. 16. 19:04
문제) https://www.acmicpc.net/problem/3055 3055번: 탈출 사악한 암흑의 군주 이민혁은 드디어 마법 구슬을 손에 넣었고, 그 능력을 실험해보기 위해 근처의 티떱숲에 홍수를 일으키려고 한다. 이 숲에는 고슴도치가 한 마리 살고 있다. 고슴도치는 제 www.acmicpc.net BFS가 같은 맵에서 2번 진행되어야 하는 문제다. 1. 젖은 물의 공간이 확장되며 (BFS) 2. 고슴도치의 최소 거리를 구해야 한다. (BFS) 구현 자체는 어렵지 않으나 3가지를 어떻게 해결할 것인지가 관건일 것 같다. 1. 고슴도치는 물에 젖게 될 곳에도 가면 안된다. -> 젖은 물의 공간을 먼저 확장하고, 그 다음으로 고슴도치의 BFS를 진행함으로써 해결했다. 2. 서로 다른 지점에서의 BFS..
-
C++) 백준 1780 종이의 개수알고리즘과 언어/c++ 2022. 2. 8. 16:54
문제 https://www.acmicpc.net/problem/1780 1780번: 종이의 개수 N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1 중 하나가 저장되어 있다. 우리는 이 행렬을 다음과 같은 규칙에 따라 적절한 크기로 자르려고 한다. 만약 종이가 모두 같은 수 www.acmicpc.net 왼쪽과 같이 INPUT으로 N * N 종이가 들어온다. (N은 3의 거듭제곱) 종이가 모두 같은 숫자로 이뤄져 있으면 그대로 사용하고 (모두 -1 or 모두 0 or 모두 1) 그렇지 않다면 9등분 하여 각각의 종이를 확인한다. 내 알고리즘 1. 2차원 배열에 INPUT 값을 저장한다. 2. Find 함수에 2차원 배열을 넘기고 전체 종이가 같은 값으로 이뤄져있는지 확인한다. 3 ..
-
C++) 원하는 자리수 까지 출력하기 (반올림, 올림, 내림)알고리즘과 언어/c++ 2022. 2. 7. 21:07
https://www.acmicpc.net/problem/2865 2865번: 나는 위대한 슈퍼스타K 첫째 줄에 N, M, K가 주어진다. (1 ≤ M ≤ 100, 1 ≤ K ≤ N ≤ 100) 다음 M개의 줄은 각 장르에 대한 참가자의 능력이 주어진다. 이 줄에는 N개의 (i, s)쌍이 주어진다. 여기서 i는 참가자의 번호, s는 그 www.acmicpc.net 해당 문제에서 출력을 다음과 같이 소수점 두번째 자리에서 반올림 해야 했다. 또한, 반올림 하고 소숫점 값이 0이더라도 출력해야 했다. 1) 기본적인 반올림, 올림, 내림 가 필요하고 기본적으로 반올림은 round( 숫자 ), 올림은 ceil( 숫자 ), 내림은 floor( 숫자 )이다. #include #include using namespa..
-
ios_base::sync_with_stdio(false); cin.tie(NULL);알고리즘과 언어/c++ 2021. 11. 14. 02:35
주로 코딩 테스트를 C++로 풀었기 때문에 python과 같은 언어에 비해 시간 초과가 나지 않을 것이라 생각했다. 그렇게 백준에서 간단한 알고리즘을 돌리려 한 그 때.. time fail이 났고 위 구문을 추가하고, 또 다른 1가지를 바꿔주자 correct 가 되었다. main 함수 안에 ios_base::sync_with_stdio(false); cin.tie(NULL); 를 쓰는 것을 몇 번 본 적이 있었다. 단순히 입출력 시간을 단축해주는 것 정도로 생각했다. 찾아보고 자세히 알게된 점이 있어 기록하게 되었다. 1. ios_base::sync_with_stdio(false); 먼저, C++ 표준 입출력은 C와 다르게 구현이 되어있다고 한다. 기본적으로 C++에서 입출력 작업을 할 때마다 C의 표준..