일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- S3
- session
- GoormIDE
- 스프링부트
- 소셜 로그인
- 자바 orm
- OpenAI API
- logout
- validation
- 이미지 업로드
- 패러다임 불일치
- 구글 로그인
- AWS
- fastapi
- 관점 지향 프로그래밍
- CustomException
- jwt
- 개발 프로젝트
- 예외 처리
- spring boot
- ec2 nginx websocket reverse proxy
- wss 연결 실패
- oauth2.0
- 백준 10815 # 백준 Java
- 도메인 주도 개발
- springboot
- spring websocket nginx 설정
- @Valid
- presigned url
- Flask
- Today
- Total
목록알고리즘/백준 (41)
개발세발은 안되요

문제https://www.acmicpc.net/problem/1041 풀이주사위의 숫자를 입력받은 후, 각 주사위의 면마다 인접해있는 주사위의 수를 우선 2차원 배열로 만들었다. 그리고 문제를 풀면 되는데, 각 N^3개의 주사위는 최종적으로 아래의 3종류 중 하나에 해당하게 된다.한 면만 보이는 경우 : ((N-2) * (N-1) * 4 + (N-2)*(N-2)) 개두 면이 보이는 경우 : ((N-1) * 4 + (N-2)*4) 개3 면이 보이는 경우 : 4개이제 각 종류별로 주사위 눈의 합의 최솟값을 찾으면 된다. 1번 유형의 경우, 전체 주사위의 눈 중 가장 작은 숫자를 찾아 주사위의 개수과 곱한다.2번 유형의 경우, 앞서 만들어놓은 배열 정보를 이용해 가장 작은 숫자가 나오는 면의 조합을 구하..
문제https://www.acmicpc.net/problem/21758 풀이 두 마리의 벌 중 하나는 항상 양 끝 위치 중 하나에 있어야 한다. 이렇게 생각하면 두 마리의 벌과 벌통의 위치에 대한 경우는 3가지로 분류할 수 있다.벌1 - 벌2 - 벌통 : 벌1이 시작 위치, 벌통이 마지막 위치에 존재하는 경우 -> 벌2의 위치를 변화시기키벌1 - 벌통 - 벌2 : 벌1이 시작 위치, 벌2가 마지막 위치에 존재하는 경우 -> 벌통의 위치를 변화시키기벌통 - 벌1 - 벌2 : 벌통이 시작 위치, 벌2가 마지막 위치에 존재하는 경우 -> 벌1의 위치를 변화시키기 이제 각 경우에 대해 발생할 수 있는 최대의 꿀 획득량을 구하면 된다. 이때 주의해야 하는 것은 현재 장소가 최대 100000 개 존재할 수 있으..
문제https://www.acmicpc.net/problem/20365 풀이빨간색 블록과 파란색 블록 중 더 많이 등장하는 블록의 색을 구한다.우선 1에서 구한 색으로 전체를 칠한다.더 적게 등장한 색의 블록 각각 칠한다.이를 식으로 표현하면 다음과 같다.ans = min(red_block , blue_block) + a 코드#include #include using namespace std;string s;int n,R_cnt, B_cnt;int ans;int main(){ cin >> n; cin >> s; //블록 개수 구하기 char cur_block = s[0]; if(cur_block == 'R') R_cnt++; else B_cnt++; f..
문제https://www.acmicpc.net/problem/21315 풀이카드를 섞는 magic(int k) 함수를 구현가등한 모든 (k1, k2) 에 대해 magic을 호출해 주어진 카드 순서를 만들 수 있는지를 확인구체적인 구현은 코드의 주석에서 확인할 수 있다. 코드#include #include using namespace std;int n;int result[1001];int arr[1001];void magic(int k){ int m_arr[1001]= {}; int n_k =1; for(int i=0; i1){ int cur_arr[1001] = {}; int cur_k = n_k/2; // 0 부터 n_k-1 까..
문제https://www.acmicpc.net/problem/2469 풀이? 줄을 기준으로 위에서 아래로 사다리를 타고 내려왔을 때 결과 배열(=up 배열)과 ?줄을 기준으로 아래에서 위로 사다리를 타고 올라갔을 때의 결과 배열(=down 배열)을 구한 후, 두 배열을 비교하여 up 배열을 down 배열과 같게 만들 수 있는지를 확인한다. 구체적인 구현 방식은 아래의 코드 주석을 참고하면 될 것 같다. 코드#include using namespace std;int k,n;string str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";string result;int flag = 0;int main(){ cin >> k >> n >> result; string s[n] = {};..
문제https://www.acmicpc.net/problem/1874 풀이 n개의 숫자를 입력 받으면서 동시에 stack에 push 하거나 pop 해가며 현재 입력된 수를 stack을 통해 꺼낼 수 있는지를 보인다.현재 입력된 숫자보다 stack의 top() 값이 작다면 입력된 숫자까지 push 해주고, 마지막에 pop을 한 번 해준다.현재 입력된 숫자와 stack의 top()이 같다면, 바로 pop() 해준다. 이때 주어진 수열을 만들 수 있는지 없는지를 확인하는 방법은 여러가지가 있을 수 있겠는데, 나의 경우 2가지 정도가 떠올랐다.모든 수열을 입력받은 후 stack의 top()이 0이 아닌 경우현재 입력받은 수가 stack()의 top()보다 작은 경우2번째 방법이 더 좋긴 하지만 첫번째 방법으로..
문제https://www.acmicpc.net/problem/1261 풀이 방법0-1 BFS를 이용하여 풀 수 있는 문제였다.벽을 부수지 않고 이동할 수 있는 경우 dq.push_front() 를 이용해 deque의 앞에 다음 위치 삽입벽을 부숴야 이동할 수 있는 경우 dq.push_back()을 이용해 deque의 뒤에 다음 위치 삽입 이를 통해 벽을 부수지 않는 방법에 대한 우선순위를 고려할 수 있다. 최대한 벽을 부수지 않고 이동해야 부숴야 하는 벽의 최소 개수를 구할 수 있기 때문에, 벽을 부수지 않고 이동하는 것을 우선적으로 고려해야 한다. 즉 벽을 부수지 않고 이동하는 경우를 dq에서 먼저 빼야 한다. 이때 방문 표시를 해가며 이미 방문한 위치는 다시 방문하지 않도록 한다. 코드#inc..
문제https://www.acmicpc.net/problem/17829 풀이문제의 요구사항을 그대로 구현하여 풀었다. 코드#include #include using namespace std;int n;int arr[1024][1024];int copy_arr[1024][1024];int max_num(int n1, int n2, int n3, int n4){ int num[4] = {n1,n2,n3,n4}; sort(num,num+4); return num[2];}void solution(int N){ // N이 1이 된 경우 종료 if(N==1){ return; } // copy 배열 초기화 for(int i=0; i> n; ..