목록전체 글 (168)
HyeLog

SSL 인증서를 발급받기 전과 후의 Nginx 설정 파일(/etc/nginx/sites-available/default) 구조를 확인해보자. 인증서를 발급받을 때, http → https 리다이렉션 설정도 진행했다. 1) SSL 인증 전 기본 상태 2) SSL 인증 후, IP to Domain 리다이렉션 한 상태
✔️문제: https://www.acmicpc.net/problem/16197 16197번: 두 동전 N×M 크기의 보드와 4개의 버튼으로 이루어진 게임이 있다. 보드는 1×1크기의 정사각형 칸으로 나누어져 있고, 각각의 칸은 비어있거나, 벽이다. 두 개의 빈 칸에는 동전이 하나씩 놓여져 있고, www.acmicpc.net ✔️알고리즘: 브루트포스-재귀 ✔️주목할 만한 점: 1) 보통 이렇게 보드가 있고 좌표 (x, y)가 있는 문제는, x와 y의 범위 검사(보드 내에 있는지)를 먼저 한 후에 다음 호출(재귀 함수 호출)을 하는데, 이 문제는 일단 호출을 한 후에, (이동했다고 가정하고) 범위를 검사함. Why? 보드 밖으로 동전이 떨어지는게 가능하니까! 2) 보드 전체를 재귀함수의 매개변수로 전달하는 ..
문제: https://www.acmicpc.net/problem/14500 14500번: 테트로미노 폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변 www.acmicpc.net 알고리즘: 브루트포스-재귀 아이디어: 기준점을 잡고 도형 만들기 -> 2가지 경우로 분류 case 1) 기준칸에서 시작해서 연속으로 인접한 3칸 고르는 경우 -> 재귀함수 사용. case 2) ㅗ,ㅜ,ㅏ,ㅓ 모양 -> for문 사용. 코드: #include using namespace std; int N, M; int arr[500][500]; bool check[500][500]; int..
📌 문제: https://www.acmicpc.net/problem/14888 14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, www.acmicpc.net 📌 알고리즘: 브루트포스-재귀 📌 idea: 숫자 사이의 각 자리에 대해 최대 4가지 경우(+,-,*,/)가 있으므로 각 경우에 대해 재귀 함수 호출. (단, 연산자의 개수를 확인할 것!) 📌 추가로 정리한 내용: - make_pair() 함수는 utility 헤더에 정의되어있으나 utility 헤더는 나 에 포함되어있으므로 따로 ..
문제: https://www.acmicpc.net/problem/14225 14225번: 부분수열의 합 수열 S가 주어졌을 때, 수열 S의 부분 수열의 합으로 나올 수 없는 가장 작은 자연수를 구하는 프로그램을 작성하시오. 예를 들어, S = [5, 1, 2]인 경우에 1, 2, 3(=1+2), 5, 6(=1+5), 7(=2+5), 8(=1+2+5)을 만들 www.acmicpc.net 알고리즘: 브루트포스-재귀 📌 1번째 풀이 💡아이디어: 부분수열의 합인 자연수면 true, 아니면 false를 저장하는 isSum 배열 사용. 로직은 백준 1182번과 유사함. 코드: #include #include #define MAX 2000001 using namespace std; int len; bool isSum..
문제: https://www.acmicpc.net/problem/1182 1182번: 부분수열의 합 첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다. www.acmicpc.net 알고리즘: 브루트포스-재귀 📌 1번째 풀이 ✔️로또 문제의 로직을 응용했다. 로또 문제는 선택해야 하는 개수가 6개로 정해져 있었지만, 부분수열의 합 문제는 부분수열의 길이가 정해져 있지 않으므로, for문으로 부분수열의 길이가 1, 2, ··· [수열의 길이] 일때 각각 재귀함수를 호출했다. 🚨for문 안에서 아래와 같이 벡터를 선언했더니 벡터에 pus..
문제: https://www.acmicpc.net/problem/6603 6603번: 로또 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 수는 k (6 < k < 13)이고, 다음 k개 수는 집합 S에 포함되는 수이다. S의 원소는 오름차순으로 www.acmicpc.net 알고리즘: 브루트포스 - 재귀 추가로 알게된 사실: 함수의 매개변수로 vector를 넘겨줄 시 & 붙이는게 안전함. 코드: #include #include using namespace std; vector six; void solve(vector &s, int index, int cnt) { // index: 선택할지 말아야할지 결정해야하는 인덱스 / cnt: 현재까지 선택한 개..
주로 보이는 재귀 함수의 패턴 1) 정답을 찾은 경우 Ex.) cnt == 6 2) 불가능한 경우 Ex.) index == a.size() 3) 다음 경우 (다음 호출) Ex.) solve(a, index+1, cnt+1); solve(a, index+1, cnt); 각 경우의 특징 - 3번의 경우, 호출 함수들의 순서가 중요할 때도 있고 상관 없을 때도 있다. 경우의 수 / 최댓값을 구하는게 목표이면 순서가 중요하지 않지만 (어짜피 브루트포스로 모든 경우를 다 해보므로) 정답을 출력하는 조건이 정해져 있다면(Ex. 사전순 출력) 순서를 고려해야 한다. - 1번과 2번 중 무엇이 먼저 와야하는지도 생각해 보아야 한다.