전체 글 보기
-
최소값과 최대값을 반환해주는 함수 min()과 max()가 존재한다. 이 함수를 사용하기 위해선 3가지 유의할 점이 있는데 1. 이 함수는 algorithm 헤더 파일에 들어있기 때문에 #include 을 선언해줘야 한다 2. using namespace std;를 선언해줘야 한다. 3. 함수명과 같은 변수 (ex: min, max)를 같이 사용해선 안된다. 위 3가지만 지켜주면 파라미터로 넣은 두 수 중 작고 큰 값을 함수 한방에 알아낼 수 있다. 만약 배열에서 최대 최소를 구하고 싶은 경우에는 다음과 같은 방법을 활용하면 된다. max_element()와 min_element() 가 그 예시이다. 대신 유의할 점이 있는데 1. 이 역시 algorithm 헤더에 있는 함수라 #include 을 반드시 ..
[c++] 최대/최소를 구하는 함수최소값과 최대값을 반환해주는 함수 min()과 max()가 존재한다. 이 함수를 사용하기 위해선 3가지 유의할 점이 있는데 1. 이 함수는 algorithm 헤더 파일에 들어있기 때문에 #include 을 선언해줘야 한다 2. using namespace std;를 선언해줘야 한다. 3. 함수명과 같은 변수 (ex: min, max)를 같이 사용해선 안된다. 위 3가지만 지켜주면 파라미터로 넣은 두 수 중 작고 큰 값을 함수 한방에 알아낼 수 있다. 만약 배열에서 최대 최소를 구하고 싶은 경우에는 다음과 같은 방법을 활용하면 된다. max_element()와 min_element() 가 그 예시이다. 대신 유의할 점이 있는데 1. 이 역시 algorithm 헤더에 있는 함수라 #include 을 반드시 ..
2020.08.16 -
어려워 보일 수 있으나 도형적으로 센스를 발휘하면 쉽게 구할 수 있다. 위의 발문에서 제시한 것처럼 각 다각형은 여러개의 삼각형으로 찢어서 생각할 수 있다. 그러한 측면에서 바라본다면 각각의 도형은 작은 도형의 모임으로 생각할 수 있고, 이 측면에서 DP를 읽었으면 충분하다. 그러면 각각의 경우에 대해서 상황을 재분석하면 다음과 같다. 꼭짓점이 홀수인 경우에는 결과적으로 삼각형을 하나 띄고 생각해보면 삼각형 1개와 꼭짓점이 짝수인 도형의 합으로 생각할 수 있다. 꼭짓점이 짝수인 경우에는 결과적으로 삼각형을 하나 띄고 생각해보면 삼각형 1개와 꼭짓점이 홀수인 도형의 합으로 생각할 수 있다. 그런데, 꼭짓점이 짝수인 경우에는 삼각형의 가장 맞은편에 꼭짓점이 존재하고 이를 기반으로 도형은 대칭적으로 나눠지고 ..
[백준 17977번] [동적 계획법] Triangulation어려워 보일 수 있으나 도형적으로 센스를 발휘하면 쉽게 구할 수 있다. 위의 발문에서 제시한 것처럼 각 다각형은 여러개의 삼각형으로 찢어서 생각할 수 있다. 그러한 측면에서 바라본다면 각각의 도형은 작은 도형의 모임으로 생각할 수 있고, 이 측면에서 DP를 읽었으면 충분하다. 그러면 각각의 경우에 대해서 상황을 재분석하면 다음과 같다. 꼭짓점이 홀수인 경우에는 결과적으로 삼각형을 하나 띄고 생각해보면 삼각형 1개와 꼭짓점이 짝수인 도형의 합으로 생각할 수 있다. 꼭짓점이 짝수인 경우에는 결과적으로 삼각형을 하나 띄고 생각해보면 삼각형 1개와 꼭짓점이 홀수인 도형의 합으로 생각할 수 있다. 그런데, 꼭짓점이 짝수인 경우에는 삼각형의 가장 맞은편에 꼭짓점이 존재하고 이를 기반으로 도형은 대칭적으로 나눠지고 ..
2020.08.12 -
이 문제의 경우는 모든 떨어진 거리가 정수인 것에 대하여 등차수열 관계가 이루지 못하게끔 하는 최솟값을 물어보는 것이다. 최솟값을 구해야하기 때문에 불가능한 것들을 모두 지우고 나머지 중에 최소를 구하는 것이 가장 현실적인 것을 깨달아야 한다. 그러면 문제에서 0~ 1000까지라고 하였으므로 배열을 미리 0~ 1000까지 설정하고 에라토스테네스의 체 논리처럼 슥슥 지워나가는 방향으로 하는 것이 가장 타당하다고 생각해야 한다. 또한, 고등학교때 배운 것처럼 등차수열의 3개의 항의 관계는 중앙값의 2배가 양 옆 수열의 합과 같다는 것이다. 이를 기반으로 불가능한 후보를 확보할 수 있다. 이 과정에서 이전 수열들에 대한 정보가 필요하게 되므로 이 지점에서 DP가 유리하다는 것을 인식하면 된다. 이를 기반으로 ..
[백준 17968번] [동적 계획법/에라토스테네스의 체] Fire on Field이 문제의 경우는 모든 떨어진 거리가 정수인 것에 대하여 등차수열 관계가 이루지 못하게끔 하는 최솟값을 물어보는 것이다. 최솟값을 구해야하기 때문에 불가능한 것들을 모두 지우고 나머지 중에 최소를 구하는 것이 가장 현실적인 것을 깨달아야 한다. 그러면 문제에서 0~ 1000까지라고 하였으므로 배열을 미리 0~ 1000까지 설정하고 에라토스테네스의 체 논리처럼 슥슥 지워나가는 방향으로 하는 것이 가장 타당하다고 생각해야 한다. 또한, 고등학교때 배운 것처럼 등차수열의 3개의 항의 관계는 중앙값의 2배가 양 옆 수열의 합과 같다는 것이다. 이를 기반으로 불가능한 후보를 확보할 수 있다. 이 과정에서 이전 수열들에 대한 정보가 필요하게 되므로 이 지점에서 DP가 유리하다는 것을 인식하면 된다. 이를 기반으로 ..
2020.08.12 -
상당히 어려운 문제이다. 이 문제를 보고 DP를 느끼는 것이 매우 어려운데, 각각의 타이밍마다 선택하는 기준이 앞의 선행조건에 의해 영향을 받는다는 점에 착안하여 DP 문제임을 인지하면 된다. 예를 들면 N시에 어떠한 광물을 채굴할지의 여부는 일단 전체 집단에서 N시에 끝나는 지를 확인하고 없으면 N-1시 까지의 최대 최굴량과 동일하다. 만약 존재하는 경우, 해당 시작시간이 M이라 가정하면 N - M시의 최대 최굴량에서 추가되는 최굴량을 더해준 것과 같다. 만약 N시에 끝나는 경우가 많은 경우에는 최댓값을 기준으로 결정해주면 된다. 즉, N시에서의 최대 최굴량을 구하는 과정에서 N.- M시의 최대 최굴량이 들어가게 되므로 DP를 활용하면 쉽게 구할 수 있음을 이 과정에서 느껴야 한다. // 다만, N시에..
[백준 17979번] [동적 계획법] What’s Mine is Mine상당히 어려운 문제이다. 이 문제를 보고 DP를 느끼는 것이 매우 어려운데, 각각의 타이밍마다 선택하는 기준이 앞의 선행조건에 의해 영향을 받는다는 점에 착안하여 DP 문제임을 인지하면 된다. 예를 들면 N시에 어떠한 광물을 채굴할지의 여부는 일단 전체 집단에서 N시에 끝나는 지를 확인하고 없으면 N-1시 까지의 최대 최굴량과 동일하다. 만약 존재하는 경우, 해당 시작시간이 M이라 가정하면 N - M시의 최대 최굴량에서 추가되는 최굴량을 더해준 것과 같다. 만약 N시에 끝나는 경우가 많은 경우에는 최댓값을 기준으로 결정해주면 된다. 즉, N시에서의 최대 최굴량을 구하는 과정에서 N.- M시의 최대 최굴량이 들어가게 되므로 DP를 활용하면 쉽게 구할 수 있음을 이 과정에서 느껴야 한다. // 다만, N시에..
2020.08.12 -
이 문제를 보고 가장 먼저 접근한 방식은 문제에서 시키는 것처럼 (1, 1)에서부터 하나씩 경우의 수를 새어나가는 것이다. 마치 초등학교때 격자 모양이 그려진 도착하는 경우의 수를 찾는 것처럼 새는 것이다. import sys def path_finder(x , y): global n cal = data[x][y] # Early exit if x == n and y == n: return data_store[n][n] # Normal process if x + cal
[백준 1890번] [동적 계획법] 점프이 문제를 보고 가장 먼저 접근한 방식은 문제에서 시키는 것처럼 (1, 1)에서부터 하나씩 경우의 수를 새어나가는 것이다. 마치 초등학교때 격자 모양이 그려진 도착하는 경우의 수를 찾는 것처럼 새는 것이다. import sys def path_finder(x , y): global n cal = data[x][y] # Early exit if x == n and y == n: return data_store[n][n] # Normal process if x + cal
2020.08.05 -
1. 사용법 주어진 문제를 둘 이상의 부분 문제로 나눈 뒤 각 문제에 대한 답을 재귀 호출을 이용해 계산하고, 각 부분 문제의 답으로부터 전체 문제의 답을 계산할 수 있을 때 사용한다. 2. 구성요소 Divide: 커다란 상황을 작은 상황으로 구획한다. Conquer: 작은 상황에서의 정답을 토대로 커다란 상황에서의 답을 도출한다. Base case: 가장 기본적인 상황 (더이상 작은 상황으로 구획할 수 없는 경우를 설정해야 한다.) 3. 조건 문제를 부분 문제로 나눠 풀기가 수월해야 한다. 부분문제들의 답을 토대로 원래 문제의 답을 쉽게 도출할 수 있어야 한다. 4. 예시 1) 백준 1629번 곱셈 (거듭제곱에서의 활용) 만약 단순하게 A를 B번 곱하고 이를 C로 나누어 나머지를 구하는 방식으로 이 문..
1. 분할정복 (Divide and conquer)1. 사용법 주어진 문제를 둘 이상의 부분 문제로 나눈 뒤 각 문제에 대한 답을 재귀 호출을 이용해 계산하고, 각 부분 문제의 답으로부터 전체 문제의 답을 계산할 수 있을 때 사용한다. 2. 구성요소 Divide: 커다란 상황을 작은 상황으로 구획한다. Conquer: 작은 상황에서의 정답을 토대로 커다란 상황에서의 답을 도출한다. Base case: 가장 기본적인 상황 (더이상 작은 상황으로 구획할 수 없는 경우를 설정해야 한다.) 3. 조건 문제를 부분 문제로 나눠 풀기가 수월해야 한다. 부분문제들의 답을 토대로 원래 문제의 답을 쉽게 도출할 수 있어야 한다. 4. 예시 1) 백준 1629번 곱셈 (거듭제곱에서의 활용) 만약 단순하게 A를 B번 곱하고 이를 C로 나누어 나머지를 구하는 방식으로 이 문..
2020.08.02 -
본 게시물에서는 vscode를 github와 연동시킨 이후 git add와 git commit 그리고 git push, git pull에 대해서 알아보겠다. 일단 기본적으로 vscode를 이용하여 코드를 편집하고 좌측 사이드 바의 3번째 칸을 누르게 되면 이처럼 changes가 나타나게 된다. 이 상태에서 +버튼을 누르게 되면 git add가 되고 아래의 그림처럼 staged changes로 변하게 된다. 이 상태에서 git commit을 하는 방법은 상단부의 체크를 누르고 message칸에 원하는 commit를 친다음 체크를 눌러주면 된다. 여기까지 수행했으면 git add 와 git commit을 vscode상에서 잘 수행한 것이다. git push 와 git pull의 경우는 상단부 점 세개를 누르..
2.VSCode를 github와 연동시키기 (2)본 게시물에서는 vscode를 github와 연동시킨 이후 git add와 git commit 그리고 git push, git pull에 대해서 알아보겠다. 일단 기본적으로 vscode를 이용하여 코드를 편집하고 좌측 사이드 바의 3번째 칸을 누르게 되면 이처럼 changes가 나타나게 된다. 이 상태에서 +버튼을 누르게 되면 git add가 되고 아래의 그림처럼 staged changes로 변하게 된다. 이 상태에서 git commit을 하는 방법은 상단부의 체크를 누르고 message칸에 원하는 commit를 친다음 체크를 눌러주면 된다. 여기까지 수행했으면 git add 와 git commit을 vscode상에서 잘 수행한 것이다. git push 와 git pull의 경우는 상단부 점 세개를 누르..
2020.07.24 -
vscode를 활용하여 github에 연동시키는 방법에 대해서 알아보도록 하겠습니다. 1. github에서 repository를 생성합니다. 2. vscode에서 clone repository를 선택합니다. 3. 위에서 언급한 Clone repository를 처음 누르게 되면 github에 로그인하라는 말이 나옵니다. 로그인을 하여 vscode와 github 계정을 연동합니다. 4. github에 로그인이 끝나면 중앙부에 clone from github 칸이 활성화 되고 이를 눌러줍니다. 4. 위의 명단에서 아까 생성한 Repository 이름이 나올 것입니다. 그것을 누르면 Finder로 로컬 저장소 중 어느 곳을 이용할 것인지 물어보는데 취향껏 선택해 주시면 됩니다. (만약에 기존에 사용하고 있는 R..
1.VSCode를 github와 연동시키기 (1)vscode를 활용하여 github에 연동시키는 방법에 대해서 알아보도록 하겠습니다. 1. github에서 repository를 생성합니다. 2. vscode에서 clone repository를 선택합니다. 3. 위에서 언급한 Clone repository를 처음 누르게 되면 github에 로그인하라는 말이 나옵니다. 로그인을 하여 vscode와 github 계정을 연동합니다. 4. github에 로그인이 끝나면 중앙부에 clone from github 칸이 활성화 되고 이를 눌러줍니다. 4. 위의 명단에서 아까 생성한 Repository 이름이 나올 것입니다. 그것을 누르면 Finder로 로컬 저장소 중 어느 곳을 이용할 것인지 물어보는데 취향껏 선택해 주시면 됩니다. (만약에 기존에 사용하고 있는 R..
2020.07.24