일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- JAVA SPRING
- 배열
- 페이코 친구코드
- Flutter
- 자바
- C언어
- 플러터 개발환경 설정
- php 프로그래밍
- 플러터
- programmers
- spring
- php 프로그래밍 입문 예제
- php 프로그래밍 입문 연습문제
- 스프링
- php 프로그래밍 입문 문제풀이
- 페이코 추천인
- php 프로그래밍 입문 3판
- 페이코 추천인코드
- 파이썬
- php 프로그래밍 입문
- php 프로그래밍 입문 솔루션
- SWEA
- C
- 최단 경로
- Java
- php
- 한정 분기
- 페이코 초대코드
- 자바 스프링
- 백준
- Today
- Total
목록알고리즘/BOJ - Java (97)
ImJay
[BOJ/Java] 2531. 회전 초밥https://www.acmicpc.net/problem/2531문제 해석회전 초밥 문제는 주어진 회전 초밥 벨트에서 연속된 K개의 초밥을 선택했을 때, 이때의 다양한 초밥의 종류를 최대화하는 문제이다. 또한, 초밥의 선택은 하나의 쿠폰을 이용하여 원하는 초밥 한 종류를 추가할 수 있어, 이를 고려한 최적의 초밥 선택 전략을 요구한다.풀이 과정 초기 설정: 입력을 받아 전역 변수로 N(총 초밥의 개수), D(초밥의 종류 수), K(연속해서 먹을 초밥의 개수), C(쿠폰으로 먹을 수 있는 초밥 번호)를 설정하고, 초밥의 번호를 저장할 배열 arr을 선언한다.슬라이딩 윈도우 및 초밥 종류 카운팅: 첫 K개의 초밥을 선택하여 종류를 카운팅한다. 이를 기반으로 슬라이딩 윈..
[BOJ/Java] 2565. 전깃줄https://www.acmicpc.net/problem/2565문제 해석문제는 주어진 전깃줄이 교차하지 않도록 최소 몇 개의 전깃줄을 제거해야 하는지를 묻고 있다. 이 문제는 동적 계획법을 이용한 최장 증가 부분 수열(LIS, Longest Increasing Subsequence) 문제의 변형으로 볼 수 있다. A와 B 두 전봇대에 연결된 전깃줄의 위치가 주어지며, 각 전깃줄은 A전봇대의 특정 위치에서 B전봇대의 특정 위치로 연결된다.풀이 과정주어진 입력으로부터 전깃줄 정보를 배열에 저장하고, A 전봇대에 대해 오름차순 정렬을 실시한다. 이후, B 전봇대의 위치를 기준으로 LIS를 계산하여, 교차하지 않는 최대 전깃줄 수를 찾는다. LIS의 길이가 교차하지 않는 최..
[BOJ/Java] 12015. 가장 긴 증가하는 부분 수열 2 12015번: 가장 긴 증가하는 부분 수열 2첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤ 1,000,000)www.acmicpc.net문제 해석주어진 수열에서 가장 긴 증가하는 부분 수열의 길이를 찾는 고전적인 문제의 확장판이다. 이 문제는 수열의 길이가 매우 클 수 있기 때문에 𝑂(𝑁^2)의 시간 복잡도를 갖는 기본적인 동적 프로그래밍 방법으로는 효율적으로 해결할 수 없다. 대신, 이진 탐색을 활용한 𝑂(𝑁log𝑁) 시간 복잡도의 풀이가 필요하다.풀이 과정입력 받기: 수열의 크기 N과 수열 A를 입력 받는다.DP 배열 초기화..
[BOJ/Java] 11055. 가장 큰 증가 부분 수열 11055번: 가장 큰 증가하는 부분 수열수열 A가 주어졌을 때, 그 수열의 증가하는 부분 수열 중에서 합이 가장 큰 것을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 인 경우에 합이 가장 큰 증가하는www.acmicpc.net문제 해석주어진 수열에서 증가 부분 수열을 찾아 그 합이 최대가 되는 값을 구하는 문제이다. 이는 '가장 긴 증가하는 부분 수열' 문제의 변형으로, 길이가 아닌 수열의 합을 최대화하는 것이 목표이다.풀이 과정입력 받기: 수열의 크기 N과 수열 A를 입력 받는다.동적 프로그래밍(DP) 배열 초기화: DP 배열을 사용하여 각 위치에서 가능한 최대 합을 저장..
[BOJ/Java] 1786. 찾기 1786번: 찾기첫째 줄에, T 중간에 P가 몇 번 나타나는지를 나타내는 음이 아닌 정수를 출력한다. 둘째 줄에는 P가 나타나는 위치를 차례대로 공백으로 구분해 출력한다. 예컨대, T의 i~i+m-1번 문자와 P의 1~mwww.acmicpc.net문제 해석문자열에서 특정 패턴을 찾는 문제로, 주어진 텍스트 문자열(T)에서 패턴 문자열(P)이 등장하는 모든 위치를 찾아 그 시작 위치들을 출력하는 것이다. 이 문제는 문자열 검색 알고리즘 중 하나인 KMP(Knuth-Morris-Pratt) 알고리즘을 사용하여 해결할 수 있다. KMP 알고리즘은 불필요한 문자 비교를 최소화하여 빠른 검색을 가능하게 한다.풀이 과정입력 받기: 문자열 T와 패턴 P를 입력 받는다.KMP 실행:..
[BOJ/Java] 9205. 맥주 마시면서 걸어가기 9205번: 맥주 마시면서 걸어가기송도에 사는 상근이와 친구들은 송도에서 열리는 펜타포트 락 페스티벌에 가려고 한다. 올해는 맥주를 마시면서 걸어가기로 했다. 출발은 상근이네 집에서 하고, 맥주 한 박스를 들고 출발한다.www.acmicpc.net문제 해석이 문제는 페스티벌에 참여하기 위해 맥주를 마시면서 여러 장소를 거쳐가는 과정을 모델링한 그래프 탐색 문제이다. 주어진 장소들 사이의 거리를 기반으로 맥주 한 캔으로 갈 수 있는 최대 거리(1000미터)를 고려해, 출발지(집)에서 목적지(페스티벌)까지 도달 가능한지 판단해야 한다.풀이 과정주어진 모든 위치를 Vertex 객체로 저장하고, 각 위치 간의 거리를 계산해 연결 가능..
[BOJ/Java] 11726. 2xn 타일링 11726번: 2×n 타일링 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. www.acmicpc.net 문제 해석 "2xn 타일링" 문제는 2xn 크기의 직사각형을 1x2, 2x1 타일로 채우는 방법의 수를 찾는 문제다. 이 문제는 동적 프로그래밍을 활용하여 풀 수 있다. 크기가 n인 문제를 해결하기 위해, 먼저 n이 1과 2일 때의 해답을 초기값으로 설정하고, n이 3 이상일 때는 점화식 𝑓(𝑛)=𝑓(𝑛−1)+𝑓(𝑛−2)를 사용하여 해를 구한다. 풀이 과정 프로그램은 BufferedReader를 이용해 입력을 받고 BufferedWrite..
[BOJ/Java] 1463. 1로 만들기 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 문제 해석 이 문제는 주어진 수 N을 1로 만드는 최소 횟수를 구하는 문제다. 수행할 수 있는 연산은 세 가지로, N을 3으로 나누기, 2로 나누기, 또는 1을 빼는 연산이 있다. 주어진 N에 대해 세 가지 연산을 적절히 조합하여 1로 만드는 데 필요한 최소 연산 횟수를 찾는 것이 목표다. 풀이 과정 본 코드는 동적 계획법을 사용하여 문제를 해결한다. 배열 dp를 사용하여 각 숫자 i를 1로 만들기 위해 필요한 최소 연산 횟수를 저장한다. dp[i]는 i번째 숫자를 1로 만드는 데 필요한 최소 연산 횟수를 나타낸다. 초기화: dp[1..
[BOJ/Java] 9095. 1, 2, 3 더하기 9095번: 1, 2, 3 더하기 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. www.acmicpc.net 문제 해석 이 문제에서는 주어진 정수 𝑛n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 동적 프로그래밍(Dynamic Programming) 문제이다. 예를 들어, 𝑛=4n=4인 경우, 다음과 같이 총 7가지 방법이 있다: 1+1+1+1 1+1+2 1+2+1 2+1+1 2+2 1+3 3+1 풀이 과정 이 문제의 풀이는 각 숫자를 1, 2, 3의 합으로 나타내는 방법의 수를 배열 dp에 저장하는 것을 포함한다. 여기서 dp[i]는 숫자 𝑖i를 나타내는 방법의 수를 저장한다. 초기 값으로 dp[1] = ..
[BOJ/Java] 2579. 계단 오르기 2579번: 계단 오르기 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점 www.acmicpc.net 문제 해석 이 문제는 주어진 계단을 오르는 최적의 방법을 찾는 다이나믹 프로그래밍 문제이다. 계단에는 점수가 부여되어 있으며, 한 번에 1개 혹은 2개의 계단을 오를 수 있다. 단, 연속된 세 개의 계단을 모두 밟으면 안 된다. 최종 목적은 계단 꼭대기에 도달할 때 최대 점수를 얻는 것이다. 풀이 과정 제출된 코드는 다이나믹 프로그래밍 방식을 사용하여 각 계단에 도달했을 때의 최대 점수를 계산한다. 코드는 다음과 같은 접근 방식을 ..