본문 바로가기

자바127

[백준 16565] N포커 / 자바 / 수학(포함배제원리 + 모듈러 연산) #문제         레벨: G1알고리즘: 수학(포함배제원리 + 모듈러 연산) 풀이시간: 1시간힌트 참조 유무: 유https://www.acmicpc.net/problem/16565#문제 풀이        쌍이 맞는 조합 카드 4개를 뽑고 나서 나머지 카드를 뽑으면 된다. 쌍이 맞는 4개의 카드를 뽑는 경우의 수는 13이고 나머지 카드를 뽑는 건 52-4= 48에서 N-4를 뽑으면 되니48C(N-4)를 해주면된다. 13x 48C(N-4)위는 틀렸다.위 공식은 두 개 이상의 포카드가 있는 경우를 중복 계산할 수 있다. 예를 들면 N=8일 때 K 조합을 뽑고  48C4에서 포카드 조합이 나오거나 안 나오거나 두 케이스를 커버칠 수 있는 거 아니야? 라고 생각할 수 있다. 그 생각이 맞다. 그러나 우리는 중복.. 2024. 9. 23.
[백준 13549] 숨바꼭질3 / 자바 / 다익스트라 알고리즘 #문제         레벨: G5알고리즘: BFS(그래프 탐색) 풀이시간: 30분힌트 참조 유무:https://www.acmicpc.net/problem/13549#문제 풀이        직관적으로 가장 빠른 방법은 -초를 소비하고 2배를 가는 거다. 그렇다면 우린 다익스트라 알고리즘을 사용하면 된다. 최종 목표지까지 최소한의 비용을 알고싶다면 출발지부터 최소한의 비용의 노드들 부터 탐색하면 되는 거다. 그래서 미리 큐에 거듭해서 거리는 두배지만 시간은 그대로인 배열이 거듭해서 추가 되고 먼저 빼지는 거다.#풀이 코드      import java.util.*;public class Main { static final int MAX = 100001; public static void main(.. 2024. 9. 14.
[백준 12850] 본대 산책2 / 자바 / 수학 #문제         레벨: G1알고리즘: 수학풀이시간: 1시간힌트 참조 유무: 유https://www.acmicpc.net/problem/12850#문제 풀이        N의 최대값이 1억이다. 이미 브루트포스는 실패이다. 그렇다 하면 종료조건을 걸얼 백트래킹하게 하는 건 어떨까? 백트래킹의 조건은 학생회관까지 갔는데 남은 시간이 3분인 거다. 돌아가는 시간은 최소 4분이 걸리기 때문에 이미 실패다. 이 뒤에 상황을 안 살펴봐도 되는 거다.아니다. 그렇다 하더라도 무조건 시간복잡도에서 걸릴 것이다. 생각이 나지 않는다. 그래서 다른 사람의 풀이를 참조하였다. 문제의 포인트는 행렬곱셈이다.  예를 들어 설명하겠다.  아래 표는 1초에 i에서 j까지 갈 수 있는 경우의 수 배열이다.N =1ABCA011B.. 2024. 9. 12.
Redis 클라이언트 lettuce에 대해서 Redis 클라이언트 3가지Jedis쓰레드 세이프하지 않아 잘 쓰이지 않는다.Lettuce비동기 및 동기식 API를 제공하는 Redis 클라이언트로, Netty 기반으로 구현되어 높은 성능을 자랑합니다.Redis Cluster와 Sentinel을 기본적으로 지원하며, 스레드 세이프한 구조로 멀티스레드 환경에서도 안정적입니다.비동기/리액티브 프로그래밍을 위한 API를 제공하므로, 높은 처리량을 필요로 하는 애플리케이션에 적합합니다.Redisson고급 기능을 제공하는 Redis 클라이언트로, Redis를 분산 데이터 구조로 활용할 수 있게 도와줍니다.분산 락, 분산 맵, 분산 큐와 같은 기능을 기본적으로 제공하며, 이러한 구조를 사용해 분산 애플리케이션을 개발하는 데 유용합니다.즉, 분산환경에서 자원 동기화.. 2024. 9. 12.
[백준 28707] 배열 정렬 / 자바 / 다익스트라 알고리즘 #문제         레벨: G1알고리즘: 다익스트라 알고리즘풀이시간: 1시간힌트 참조 유무: 유https://www.acmicpc.net/problem/28707 #문제 풀이        이 문제는 다익스트라 알고리즘을 사용한다. 통상적인 다익스트라 알고리즘은 노드에 도입하여 이 문제에 대해서 어떻게 다익스트라 알고리즘을 이용할지 가늠이 안 갈 수도있다. 다익스트라 알고리즘을 적용할 때 노드가 아니라 상태A -> 상태 B로 갈 때 최소 비용이라고 생각하면 이해하기 편할 거다. 만약 예제2번을 들어 설명하자면,1313 - > 1133 로 갈 때의 최소비용을 저장하는 것이다. 다익스트라 알고리즘을 사용할 수 있는데 또 다른 이유가 있다. 당연한 이야기지만, 우리는 정렬된 정답 배열을 알고있다. 만약 131.. 2024. 9. 11.
[백준 9328] 열쇠 / 자바 / bfs + 구현 #문제         레벨: G1알고리즘: bfs + 구현풀이시간: 1시간 힌트 참조 유무: 유https://www.acmicpc.net/problem/9328#문제 풀이        이 문제에서 중요한 건 bfs가 아니다. 구현에 초점에 맞춰진 문제이다. 그냥 bfs로 탐색하면 지금은 못가더라도 나중에 키(소문자)를 획득하고 나서 갈 수 있는 곳은 어떻게 갈 것인가? 어떻게 구현할 것인가를 묻고 있다. 아이디어는 간단하다. 지금 열 수 없는 문은 나중에 열 수도 있으니 저장해둔다. 그리고 해당 키를 얻었을 때 열 수 있는 문을 다 열고 마저 탐색한다.나머지는 주석참고 바란다.#풀이 코드      import java.io.BufferedReader;import java.io.IOException;imp.. 2024. 9. 10.
[백준 7543] 합이 0인 네 정수 / 자바 / 투포인터 #문제         레벨: G2알고리즘: 투포인터풀이시간: 1시간힌트 참조 유무: 유https://www.acmicpc.net/problem/7453 #문제 풀이        ✔ 풀이법4개의 배열을 각각 조회하면 시간초과가 발생하므로 A와 B 원소의 합이 C와 D 원소의 합이 부호만 다르고 절대값이 같은 경우를 찾으면된다.여기서 의아한 사람들이 있을 거다. 엥 a+b  = - (c+d) 조합만 고려하면 모든 경우의 수를 찾지 못하지 않나? a+c = -(b+d)라던지 a+d = -(c+b) 의 조합을 고려해야지 않나?아니다. 한 가지의 조합만 고려해도 모든 경우의 수를 알 수 있다. 예시를 들어보겠다.위와 같은 배열이 있을 때  a+b  = - (c+d)의 경우의 수만 구해보겠다. a+b가 (1+4=5.. 2024. 9. 9.
[백준 2623] 음악프로그램 / 자바 / 위상정렬 #문제         레벨: G3알고리즘: 위상정렬 풀이시간:  1시간힌트 참조 유무: 유https://www.acmicpc.net/problem/2623 #문제 풀이        위상정렬이란 순서가 정혀져 있는 작업을 순서를 정해주는 작업을 뜻한다.코드는 큐로 구현된다. 방향성이 있는 선들을 하나 씩 끊어주는 느낌으로 구현하면된다. 그리고 선이 다 끊어진 노드들은 결과에 포함시킨다. 글보다는 코드로 보는 것이 이해가 더 쉬울  것이다. 아래를 참조바란다.#풀이 코드      import java.util.*;import java.io.*;public class Main { static ArrayList[] graph; static int[] inDegree; static int N, M.. 2024. 9. 6.
[백준 2239] 스도쿠 / 자바 / dfs(백트래킹) #문제         레벨: G4 알고리즘: dfs(백트래킹)풀이시간: 1시간힌트 참조 유무: 유https://www.acmicpc.net/problem/2239#문제 풀이        해당 자리에 숫자를 놓으려면 해당 열, 해당 행, 해당 박스 안에 같은 숫자가 있으면 안된다. 이것들을 검사하는 코드를 구현하고 백트래킹을 통해서 숫자를 채워넣으면 된다.dfs 코드는 아래와 같이 방문한다. ------------------------->       1 번째 행------------------------->       2 번째 행 ------------------------->       3 번째 행 ------------------------->       4 번째 행 -------------------.. 2024. 9. 1.