본문 바로가기

Baekjoon100

[백준] 17609번 회문 JAVA (자바) 풀이 문제 17609번 (투포인터) : 회문이란? 앞뒤로 같은 순서의 문자로 구성된 문자열 (예) 'abba’, ‘kayak’, ‘reviver’, ‘madam’ : 유사회문이란? 한 문자를 삭제해서 회문으로 만들 수 있는 문자열 (예) 'summuus’ 에서 5 or 6 번째 문자 제거하면 회문이 된다 : 회문이면 0, 유사회문이면 1, 그 외는 2를 출력한다 [입력] : 첫 줄에 문자열 개수 T 둘째 줄부터 T개의 줄에 문자열 하나씩 입력 ( 3 ≤ 문자열 길이 ≤100,000 ) (문자열 길이는 3영문 알파벳 소문자로 이루어져있다) [출력] : 회문이면 0, 유사회문이면 1, 그 외는 2를 출력 [설명] 양 끝에서부터 검사하기 시작한다 → 이때 시작지점, 끝지점 두 개의 포인터 필요 시작 = 끝 이라면 .. 2023. 10. 23.
[백준] 2531번 회전 초밥 JAVA (자바) 풀이 문제 2531번 (투포인터, 슬라이딩 윈도우) : 초밥 벨트 임의의 위치부터 k개의 접시를 연속해서 식사 : 쿠폰에 쓰여진 초밥은 무료 시식 가능 : 손님이 먹을 수 있는 최대 초밥 가짓수를 구해라 [입력] : 첫 줄에 접시 수 N / 초밥 가짓 수 d / 연속해서 먹는 접시의 수 k / 쿠폰 번호 c 둘째 줄에는 수열 N개의 줄에는 각 줄 마다 초밥 종류가 하나씩 주어진다 [출력] : 먹을 수 있는 초밥의 최대 가짓 수 출력 [설명] (예시) k=4, 30번 초밥을 쿠폰 획득일 경우 - 가능한 모든 경우의 수 (7,9,7,30),(9,7,30,2),(7,30,2,7),(30,2,7,9),(2,7,9,25),(7,9,25,7),(9,25,7,9),(25,7,9,7) - 최대한 많은 종류를 먹어야해서 초밥.. 2023. 10. 23.
[백준] 11053번 가장 긴 증가하는 부분 수열 JAVA (자바) 풀이 문제 11053번 : 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우, 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다. 각 dp[] 의 길이들은 다음 부분 수열을 의미하는 것이다 출처 https://st-lab.tistory.com/137 dp[0] = 10 이제 나온 것 {10} 중에 가장 길다 = 1 dp[1] = 20 이제 나온 것 {10, 20} 중에 가장 길다 = 2 dp[2] = 10 이제 나온 것 {10, 20} 중에 10까지는 길이가 1밖에 안된다 dp[3] = 30 이제 나온 것 {10, 20, 30} 중에 가장 길다 = 3 dp[4] = 20 이.. 2023. 9. 25.
[백준] 1463번 1로 만들기 JAVA (자바) 풀이 문제 1463번 : 정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 X가 3으로 나누어 떨어지면, ÷ 3 X가 2로 나누어 떨어지면, ÷ 2 - 1 위와 같은 연산 세 개를 사용해서 N = 1을 만들려고 할 때 연산의 최소 횟수를 출력 [입력] : 첫 줄에 N (1 ≤ N ≤ 106) [출력] : 첫째 줄에 연산을 하는 횟수의 최솟값을 출력 [설명] DP 알고리즘 : 이미 계산된 결과는 별도의 메모리 영역에 저장하여 다시 계산하지 않음으로서 수행 시간 단축시키는 방법 DP 구현 방법은 일반적으로 Top-down(하향식)과 Bottom-up(상향식)으로 구성된다 1) Top-down(하향식) 하위 문제를 재귀적으로 호출하여 해결함으로서 상위 문제를 해결하는 방식 이 때 해결해놓은 하위 문제를 저장해.. 2023. 9. 25.
[백준] 2839번 설탕 배달 JAVA (자바) 풀이 문제 2839번  :  설탕 N킬로그램 배달해야 한다    설탕은 봉지에 담겨져 있다 ( 3킬로그램 봉지 or 5킬로그램 봉지 )    봉지의 최소 개수를 구해라 [입력] :  첫 줄에 N  [출력] :  봉지의 최소 개수 출력    ( 정확하게 N킬로그램 만들 수 없다면 -1 출력 )[설명] DP 알고리즘: 이미 계산된 결과는 별도의 메모리 영역에 저장하여 다시 계산하지 않음으로서 수행 시간 단축시키는 방법  DP 구현 방법은 일반적으로 Top-down(하향식)과 Bottom-up(상향식)으로 구성된다 1) Top-down(하향식)     하위 문제를 재귀적으로 호출하여 해결함으로서 상위 문제를 해결하는 방식      이 때 해결해놓은 하위 문제를 저장해 놓기 위해 Memoization사용 public.. 2023. 9. 22.
[백준] 7576번 토마토 JAVA (자바) 풀이 문제 7576번 (2차원 토마토 문제) : 토마토들이 며칠이 지나면 다 익게 되는지 그 최소 일수를 구하는 프로그램 : 토마토는 격자모양 상자의 칸에 하나씩 넣은 다음 상자들을 수직으로 쌓아 올려서 창고에 보관 상자의 일부 칸에는 토마토가 들어있지 않을 수도 있다 : 익은 토마토과 인접하면 익지 않은 토마토들 영향을 받는다 인접한 곳 = 상, 하, 좌, 우 4가지 방향에 있는 토마토 [입력] : 첫 줄에는 상자 가로크기 M, 상자 세로 크기 N : 둘째 줄부터는 저장된 토마토들의 가로 세로 정보 : 1 = 익은 토마토, 0 = 익지 않은 토마토, -1 = 토마토가 들어있지 않은 칸 [출력] : 여러분은 토마토가 모두 익을 때까지 최소 며칠이 걸리는지를 계산해서 출력 : 저장될 때부터 모든 토마토가 익어있.. 2023. 9. 21.
[백준] 7569번 토마토 JAVA (자바) 풀이 문제 7569번 (bfs, 3차원 토마토 문제) :  토마토들이 며칠이 지나면 다 익게 되는지 그 최소 일수를 구하는 프로그램 :  토마토는 격자모양 상자의 칸에 하나씩 넣은 다음 상자들을 수직으로 쌓아 올려서 창고에 보관    상자의 일부 칸에는 토마토가 들어있지 않을 수도 있다 :  익은 토마토과 인접하면 익지 않은 토마토들 영향을 받는다    인접한 곳 = 위, 아래, 왼쪽, 오른쪽, 앞, 뒤 여섯 방향에 있는 토마토     [입력] :  첫 줄에는 상자 가로크기 M, 상자 세로 크기 N, 쌓아올려지는 상자의 수 H (단, 2 ≤ M,N ≤ 100, 1 ≤ H ≤ 100)  :  둘째 줄부터는 가장 밑의 상자부터 가장 위의 상자까지에 저장된 토마토들의 정보  :  1 = 익은 토마토, 0 = 익지 .. 2023. 9. 21.
[백준] 11725번 트리의 부모 찾기 JAVA (자바) 풀이 문제 11725번 :  트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램     [입력] :  첫째 줄에 노드의 개수 N :  둘째 줄부터 N-1개의 줄에 트리 상에서 연결된 두 정점   [출력] :  2 부터 N 노드까지 부모 노드 순서대로 출력    DFS  현재 정점에서 갈 수 있는 점들까지 들어가면서 탐색 Stack 혹은 재귀함수로 구현 경로를 탐색할 때 한 방향으로 갈 수 있을 때까지 계속 가다가더 이상 갈 수 없게되면 다른 방향으로 다시 탐색 진행모든 노드를 방문하는 경우에 사용  ArrayList   - 본 코드에 arr 가 아닌 arraylist를 사용한 이유는 메모리초과 때문이다 - 배열과 차이점 : 배열은 크기가 고정, ArrayList는 크기가 가변적   - Arr.. 2023. 9. 20.
[백준] 7562번 나이트의 이동 JAVA (자바) 풀이 문제 7562번 (bfs) :  나이트는 몇 번 움직이면 칸으로 이동할 수 있을까?    [입력] :  첫째 줄에는 테스트 케이스 묶음 개수  :  테스트 케이스 한묶음 당 3개의 줄이 있다 :  첫째 줄에는 체스판의 한 변의 길이 (크기 1 × 1) :  둘째 줄에는 나이트가 현재있는 칸 위치 :  셋째 줄에는 나이트가 이동하려는 칸 위치   [출력] :  각 테스트 케이스 묶음마다 나이트의 최소 이동 횟수 출력   [설명]  BFS    현재 정점에 연결된 가까운 점들부터 탐색  Queue를 사용해서 구현     java.awt.Point  -  Point 클래스는 좌표 상의 위치를 나타내는데 사용-  x와 y좌표값을 저장하기 위한 멤버변수를 갖는다 Field SummaryModifier and Ty.. 2023. 9. 17.
[백준] 11724번 연결 요소의 개 JAVA (자바) 풀이 문제 11724번 : 연결 요소의 개수 구하기 [입력] : 첫째 줄에 정점의 개수 N, 간선의 개수 M : 둘째 줄부터 M개의 줄에 간선의 양 끝점 u, v(1 ≤ u, v ≤ N, u ≠ v) (같은 간선은 한 번만) [출력] : 연결 요소의 개수를 출력 [설명] DFS 현재 정점에서 갈 수 있는 점들까지 들어가면서 탐색 Stack 혹은 재귀함수로 구현 경로를 탐색할 때 한 방향으로 갈 수 있을 때까지 계속 가다가 더 이상 갈 수 없게되면 다른 방향으로 다시 탐색 진행 모든 노드를 방문하는 경우에 사용 [문제 과정] 입력 1 2 2 5 5 1 3 4 4 6 출력 2 출처 : https://aeunhi99.tistory.com/59 if(!visit[i]){ dfs(i); } → if문 시작 dfs(1).. 2023. 9. 16.