목록전체 글 (73)
delpho
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/CgrWL/btsFhTHXxzN/fiUPqpS84bCbVxGSraINA0/img.png)
Think 1. 답을 구하는 방법을 고민하다가 나온 결론은, (O의 위치까지 가는 경로의 수) * ([N-1][M-1]의 위치까지 가는 경로의 수) (= 조합) 2. 경로의 수를 구하는 방법을 고민했는데, https://blog.naver.com/occidere/221012382627 의 내용처럼 구하는 방법을 떠올리게 되었음 3. 따라서, previousK(), nextK()로 함수를 나눈 뒤, 경우의 수 두 개를 구한 후 답을 도출함. 4. K = 0일때 혹은 K % M = 0 일때의 경우들에서 예외 처리를 잘 해주어야했음. 제출 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; ..
Think 1. 분할정복을 위한 재귀를 만들기 위해서는 기본적으로 매개변수에 [시작Index]와 [size]가 꼭 필요함. 2. 먼저, 전체 사이즈만큼의 2차원 배열을 모두 탐색하면서 해당 크기의 색종이가 모두 파란색인지, 흰색인지 체크 (만약 맞다면 해당 색을 카운트하는 변수 + 1 해주기) 3. 색이 섞여있다면, 4개의 색종이로 분할해준다 (4개의 재귀를 탄다.) 4. (2,3 반복) 하여 값을 도출 제출 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; public class test { static int N, map[][], white, b..
Think 1. 컬렉션에 있는 우선순위 큐를 사용할 수 있으면 풀 수 있는 문제다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; public class test { static int N; static PriorityQueue pq = new PriorityQueue(Collections.reverseOrder()); static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); static StringBuilder sb = new StringBuilder(); pub..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/oVbP0/btsE41kCRLY/eeOaIjkZZQYRfByDM5t3D0/img.png)
Think 1. 기초 BFS 문제다. 2. 하루씩 익은 토마토들이 주변 토마토들에게 영향을 끼쳐서 익게 만드려면, 아래 그림처럼 애초에 큐에 넣어놓고 poll 하면서 풀면 된다. (토마토 클래스를 정의해서 얼마나 지났는지 따로 관리해주자) import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.Queue; import java.util.StringTokenizer; public class test { static int N, M; static Tomato[][] map; static boolean[][] isVis..
Think 괄호를 활용해서 최솟값을 만들 수 있는 방법은, - 값을 최대로 만들도록 해야한다. 예를들어, 20+30-10+50-70 라면, 20+30-(10+50)-(70) 와 같이 만들어주어야 한다. 그래서 처음 구현 아이디어는, 해당 식에 직접 괄호 문자를 추가한 후, 하나씩 파싱하며 값을 계산했는데 구현이 넘 복잡해지고 틀리기도 했다. 구글링을 통해 풀이를 살펴보니, StringTokenizer나 String.split()을 통해 - 부호를 기준으로 문자열들을 나눈 후, 각각 문자열을 + 부호로 또 나눠서 더해준 뒤 값을 계산한다. 나뉜 문자열의 처음 값은 + 값이기 때문에 이 값을 처리해야하는데, sum 변수를 Integer.MAX_VALUE로 초기화 후 if문을 통해 저장한다. sum = 0으로..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/c1ItPo/btrXQfShxtL/VYSiR34oct8IG58WPN1DlK/img.png)
문제 링크 성능 요약 메모리: 229620 KB, 시간: 4100 ms 분류 수학(math), 정수론(number_theory), 소수 판정(primality_test), 에라토스테네스의 체(sieve) 문제 설명 1보다 큰 자연수 중에서 1과 자기 자신을 제외한 약수가 없는 자연수를 소수라고 한다. 예를 들어, 5는 1과 5를 제외한 약수가 없기 때문에 소수이다. 하지만, 6은 6 = 2 × 3 이기 때문에 소수가 아니다. 골드바흐의 추측은 유명한 정수론의 미해결 문제로, 2보다 큰 모든 짝수는 두 소수의 합으로 나타낼 수 있다는 것이다. 이러한 수를 골드바흐 수라고 한다. 또, 짝수를 두 소수의 합으로 나타내는 표현을 그 수의 골드바흐 파티션이라고 한다. 예를 들면, 4 = 2 + 2, 6 = 3 +..