https://www.acmicpc.net/problem/1094 1094번: 막대기 지민이는 길이가 64cm인 막대를 가지고 있다. 어느 날, 그는 길이가 Xcm인 막대가 가지고 싶어졌다. 지민이는 원래 가지고 있던 막대를 더 작은 막대로 자른다음에, 풀로 붙여서 길이가 Xcm인 막대 www.acmicpc.net 문제 이해 해당 문제는 조건에 따라 코드를 작성하는 문제이다. 풀이 조건에 따라 코드를 작성한다. import java.util.ArrayList; import java.util.Collections; import java.util.Scanner; public class test43 { public static void main(String[] args) { Scanner sc = new Sc..
https://www.acmicpc.net/problem/1373 1373번: 2진수 8진수 첫째 줄에 2진수가 주어진다. 주어지는 수의 길이는 1,000,000을 넘지 않는다. www.acmicpc.net 문제 이해 해당 문제는 그냥 2진수를 8진수로 변경을 하는 쉬운 문제이다. 풀이 끝에서 3글자씩 뽑아서 해당 글자가 무슨 숫자인지 체크해 문자열에 추가하는 작업을 반복해주면 된다. import java.io.*; import java.math.BigInteger; import java.util.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedRe..
https://www.acmicpc.net/problem/1107 1107번: 리모컨 첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼 www.acmicpc.net 문제이해 해당 문제는 고장난 버튼을 체크해서 고장난 버튼을 사용하지 않고 가장 가까운 수를 찾은 뒤에 + - 버튼을 이용해 이동하는 문제이다. 처음 해당 문제는 상당히 어려웠다. 주의 해야한는 부분은 다음과 같다. 고장난 버튼을 체크 최솟 값을 구하기 처음 부터 완전 탐색 문제 풀이 모든 값들을 입력 받는다. 0 ~ 999999 까지 반복한다. 고장난 버튼을 눌러야하면 다음 반복으..
https://www.acmicpc.net/problem/1092 1092번: 배 첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 각 크레인의 무게 제한이 주어진다. 이 값은 1,000,000보다 작거나 같다. 셋째 줄에는 박스의 수 M이 주어진다. M은 10,000보 www.acmicpc.net 문제 이해 해당 문제는 크레인이 박스를 옮기는데 크레인의 제한에 맞추어 옮기는 문제이다. 해당 문제의 경우 가장 큰 크레인 부터 가장 큰 박스 부터 시작해서 차례로 검색해서 큰 순서대로 먼저 처리하는 방식으로 문제를 해결 한다. 풀이 1. 크레인에 대한 입력 2. 박스에 대한 입력 3. 내림 차순으로 정렬 4. 만약 가장 큰 박스를 가장 큰 크레인이 옮길 수 없다면 -1 출력 5...
https://www.acmicpc.net/problem/1083 1083번: 소트 크기가 N인 배열 A가 있다. 배열에 있는 모든 수는 서로 다르다. 이 배열을 소트할 때, 연속된 두 개의 원소만 교환할 수 있다. 그리고, 교환은 많아봐야 S번 할 수 있다. 이때, 소트한 결과가 사전 www.acmicpc.net 문제 이해 해당 문제는 소팅하는 단순한 문제이지만 정해진 횟수만 반복해서 가장 큰수를 찾아야 한다. 1번째 자리부터 최대한 큰 수를 넣어야 하므로 1번째부터 시작하여 최대한 넣을 수 있는 큰 수를 찾아서 넣는 방식으로 푼다. 풀이 처음 부타 마지막까지 반복하면서 가장 큰수를 찾고 해당 수를 앞으로 넘기는 방식으로 풀이를 진행한다. 단 여기서 변경할 수 있는 범위는 S에 다라서 정해진다. imp..
https://www.acmicpc.net/problem/1522 1522번: 문자열 교환 a와 b로만 이루어진 문자열이 주어질 때, a를 모두 연속으로 만들기 위해서 필요한 교환의 회수를 최소로 하는 프로그램을 작성하시오. 이 문자열은 원형이기 때문에, 처음과 끝은 서로 인접해 www.acmicpc.net 문제 이해 해당 문제의 경우 a가 연속으로 있기 위해선 몇개의 b를 교환해야 하는 가에 대한 문제이다. 해당 문제의 경우 모든 a가 연속으로 있으면 된다는 것을 기억하고 슬라이딩 윈도우 방식으로 풀었다. https://soeasyalgo.tistory.com/49 슬라이딩 윈도우 알고리즘 이번 포스트에서는 앞서 살펴봤던 투포인터와 아주 유사한 슬라이딩 윈도우에 대해 살펴보자. https://soeas..
https://www.acmicpc.net/problem/1359 1359번: 복권 첫째 줄에 세 정수 N, M, K가 주어진다. www.acmicpc.net 문제이해 해당 문제는 콤비네이션을 구해 확률을 구하면 되는 문제이다. 단 해당 문제의 경우 K개 이상 맞으면 당첨이기 때문에 K개 이상 맞은 모든 경우의 수를 더해 확률을 계산해 주어야 한다. 풀이 문제해결은 다음과 같다. import java.util.Scanner; public class test39{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int m = sc.nextInt(); int k = sc.nextI..

https://www.acmicpc.net/problem/2553 2553번: 마지막 팩토리얼 수 첫째 줄에 N이 주어진다. N은 20,000보다 작거나 같은 자연수 이다. www.acmicpc.net 문제이해 해당 문제의 경우 단순히 팩토리얼을 구하고 0보다 큰 가장 작은 자릿수를 계산하면 되는 문제이다. 단 해당 문제의 경우 단순히 팩토리얼을 계산해 문제를 해결 하려 하면 시간 초과로 인해 해결 할 수 없다. https://steady-coding.tistory.com/322 [BOJ] 백준 2553번 : 마지막 팩토리얼 수 (JAVA) 문제 N!의 값을 계산한 후에, 0이 아닌 가장 낮은 자리 수를 구하시오. 예를 들어, 4! = 24 이기 때문에, 0이 아닌 가장 낮은 자리 수는 4이다. 또, 5..
2346번: 풍선 터뜨리기 (acmicpc.net) 2346번: 풍선 터뜨리기 1번부터 N번까지 N개의 풍선이 원형으로 놓여 있고. i번 풍선의 오른쪽에는 i+1번 풍선이 있고, 왼쪽에는 i-1번 풍선이 있다. 단, 1번 풍선의 왼쪽에 N번 풍선이 있고, N번 풍선의 오른쪽에 1번 풍선 www.acmicpc.net 문제이해 해당 문제는 단순하게 배열안에 들어있는 수만큼 이동해 배열을 확인하고 다시 이동하는 문제이다. 문제풀이 입력을 배열에 저장한다. 처음에는 0번째 배열을 열어보고 0번째 배열을 없엔다. 0번째 배열에 들어있는 수만큼 이동한다. 위의 동작을 반복하면 문제를 해결 할 수 있다. import java.io.*; import java.util.LinkedList; import java.util..
1080번: 행렬 (acmicpc.net) 1080번: 행렬 첫째 줄에 행렬의 크기 N M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 행렬 A가 주어지고, 그 다음줄부터 N개의 줄에는 행렬 B가 주어진다. www.acmicpc.net 문제이해 해당 문제의 경우 처음에는 3*3이 아니라 1열을 통째로 바꾸는 것으로 이해하고 그렇게 문제를 해결 했더니 실패 했다. 하지만 해당 문제의 경우 3*3의 행렬만 교체 하는 것이다. 여기서 중요한 것은 변경을 최소화 하는 것이다. 해당 문제에서 변경을 최소화 하기 위해선 왼쪽 위부터 반복한다면 변경을 최소화 할 수 있다. 문제풀이 모든 값들을 입력받고 왼쪽 위부터 시작해 비교해서 변경이 필요하면 변경한다. 마지막에 A와 B가 ..
1052번: 물병 (acmicpc.net) 1052번: 물병 지민이는 N개의 물병을 가지고 있다. 각 물병에는 물을 무한대로 부을 수 있다. 처음에 모든 물병에는 물이 1리터씩 들어있다. 지민이는 이 물병을 또 다른 장소로 옮기려고 한다. 지민이는 한 번 www.acmicpc.net 문제이해 해당 문제는 물병을 합치는 문제이다. 단 모든 물병의 량은 1이고 용량이 같은 두 물병만 합칠 수 있기에 짝수 일 경우 2로 나누고 홀 수일 경우 +1을 하는 식의 문제이다. 해당 문제를 풀 때 처음에는 문제를 정확히 이해하지 못해 일일이 물병의 량이 같은지를 확인 해 비교 했다. 하지만 검색을 해보니 단순히 물병을 몇개를 샀냐(홀 수가 몇 번 나왔냐)만을 비교하는 문제였다. 문제풀이 소스 코드를 보면 이해할 수 있..
1475번: 방 번호 (acmicpc.net) 1475번: 방 번호 첫째 줄에 다솜이의 방 번호 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수이다. www.acmicpc.net 문제이해 들어오는 수들의 수를 모두 계산 한뒤 9와 6을 처리하고 최대값을 구한다. 풀이 6도 9와 함께 저장한뒤 8까지의 최대값과 9의 최대값을 비교한다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; public class test35 { public static void main(String args[]) throws IOException { Bu..
2232번: 지뢰 (acmicpc.net) 2232번: 지뢰 일직선상에 N개의 지뢰가 같은 간격으로 매설되어 있다. 각각의 지뢰는 충격 강도 Pi가 있어서, Pi를 초과하는 힘을 가하면 Pi만큼의 힘을 발휘하며 터지게 된다. 어떤 지뢰가 터지게 되면, 그 지 www.acmicpc.net 문제 이해 해당 문제는 앞뒤의 숫자를 비교해 지뢰를 터트리는 문제이다. 해당 문제의 경우 단순히 앞뒤의 숫자를 비교하면 된다. 단 맨 앞과 맨 뒤의 경우 앞뒤의 숫자가 없기 때문에 예외로 체크를 해주면 된다. 풀이 맨앞과 맨 뒤만 체크를 해주고 1개일 경우 그 지뢰만 터트리면 된다. 사이에 있는 것들은 사이에 있는 값들을 비교하면서 중앙에 있는 값이 크다면 해당 지뢰를 터트리면 된다. import java.util.*; ..
1735번: 분수 합 (acmicpc.net) 1735번: 분수 합 첫째 줄과 둘째 줄에, 각 분수의 분자와 분모를 뜻하는 두 개의 자연수가 순서대로 주어진다. 입력되는 네 자연수는 모두 30,000 이하이다. www.acmicpc.net 문제 이해 해당 문제는 분수의 합을 계산 하는 문제이다. 여기서 알아야 할 점은 유클리드 호제법을 이용해야 한다. 다음을 참조하면 좋다. 유클리드 호제법이란? | Lonpeach Tech 유클리드 호제법이란? | Lonpeach Tech 개념 tech.lonpeach.com 풀이 단순히 분수를 합하고 유클리드 호제법을 적용하면 된다. import java.io.BufferedReader; import java.io.BufferedWriter; import java.io..
2290번: LCD Test (acmicpc.net) 2290번: LCD Test 첫째 줄에 두 개의 정수 s와 n이 들어온다. (1 ≤ s ≤ 10, 0 ≤ n ≤ 9,999,999,999)이다. n은 LCD 모니터에 나타내야 할 수 이며, s는 크기이다. www.acmicpc.net 문제이해 해당 문제는 이해를 잘 하지 못해 검색을 통해 이해 했다. 처음에 주어진 S는 문자열 출력 횟수가 아닌 (s+2의 가로와 2s+3의 세로) 이 공식을 위한 수이다. 즉 이 수 만큼 가로 세로를 만들 어주기 만 하면 된다. 풀이 문제를 푸는 방식은 간단하다 S를 저장한 뒤 S를 (s+2의 가로와 2s+3의 세로) 이 공식에 맞추에 그려주기만 하면 된다. 우선 입력받은 문자열을 S와 N(lcd)로 구분한다. N(lc..
2089번: -2진수 (acmicpc.net) 2089번: -2진수 -2진법은 부호 없는 2진수로 표현이 된다. 2진법에서는 20, 21, 22, 23이 표현 되지만 -2진법에서는 (-2)0 = 1, (-2)1 = -2, (-2)2 = 4, (-2)3 = -8을 표현한다. 10진수로 1부터 표현하자면 1, 110, 111, 100, 101, 11010, 110 www.acmicpc.net 문제이해 해당 문제의 경우 처음에 이해를 못해 검색을 통해 이해를 했다. 해당 문제는 -2 진수를 구한다는 것일 뿐 일반 적인 2진수를 구하는 방식을 계산하면된다. 풀이 2진수를 구하는 식으로 -2로 나눈 나머지를 계산한 뒤에 그것을 반전 시켜 계산한다. import java.io.BufferedReader; impor..
2075번: N번째 큰 수 (acmicpc.net) 2075번: N번째 큰 수 첫째 줄에 N(1 ≤ N ≤ 1,500)이 주어진다. 다음 N개의 줄에는 각 줄마다 N개의 수가 주어진다. 표에 적힌 수는 -10억보다 크거나 같고, 10억보다 작거나 같은 정수이다. www.acmicpc.net 문제이해 해당 문제는 그냥 N*N 배열을 만들어 정렬한 뒤 원하는 수를 출력하면 된다. 풀이 이해 처럼 풀면된다. import java.util.*; import java.io.*; class test31 { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader..
2072번: 오목 (acmicpc.net) 2072번: 오목 19x19크기의 바둑판에, 돌을 놓을 좌표가 주어지면 이 게임이 몇 수만에 끝나는 지를 알아보려고 한다. 사용하고자 하는 바둑판의 모양은 위의 그림과 같으며, (1, 1)이 가장 왼쪽 위의 좌표이고 (19 www.acmicpc.net 문제 이해 해당 문제는 단순히 주어진 내용에 맞춰 알고리즘을 짜면 된다. 여기서 주의 할 것은 5개 이상이 아니라 5개 이어야만 문제가 해결이 된다. 풀이 8개 이하는 무조건 승부가 나지 않는다. 9개 부터는 승부가 낮는지 비교하면서 배열을 채우면 된다. import java.util.Arrays; import java.util.Scanner; public class test30 { public static voi..

2004번: 조합 0의 개수 (acmicpc.net) 2004번: 조합 0의 개수 첫째 줄에 정수 $n$, $m$ ($0 \le m \le n \le 2,000,000,000$, $n \ne 0$)이 들어온다. www.acmicpc.net 문제이해 이 문제는 문제를 이해하지 못해 검색을 통해 문제를 이해 했다. 해당 문제의 경우 조합 중 0이 나오는 조합을 찾는 문제이다. 공식은 다음과 같다. 이 공식을 이용해 문제를 풀면 된다. 우선 0이 나오기 위해선 2와 5의 겹치는 승수가 0이 나올 수 있다. 다음을 보면 좀더 이해 하기 쉬울 것이다. 즉 우리가 구할 것은 n!, (n-m)!, m!의 2와 5의 승수를 구하는 것이다. 풀이 import java.util.Scanner; public class Ma..
1965번: 상자넣기 (acmicpc.net) 1965번: 상자넣기 정육면체 모양의 상자가 일렬로 늘어서 있다. 상자마다 크기가 주어져 있는데, 앞에 있는 상자의 크기가 뒤에 있는 상자의 크기보다 작으면, 앞에 있는 상자를 뒤에 있는 상자 안에 넣을 수가 www.acmicpc.net 문제 이해 해당 문제는 DP를 이용해 풀면 되는 간단한 문제이다. 추가적으로 다음 글을 참고하면 좋을 듯 하다. [Java]최장 증가 부분 수열(LIS, Longest Increasing Subsequence) :: TH (tistory.com) [Java]최장 증가 부분 수열(LIS, Longest Increasing Subsequence) *최장 증가 부분 수열(LIS, Longest Increasing Subsequen..
1927번: 최소 힙 (acmicpc.net) 1927번: 최소 힙 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net 문제 이해 다음 문제는 최소힙을 사용하는 방법에 대한 문제이다. 이 문제는 최소힙을 만들기만 하면 간단한 문제이다. 우리는 자바를 사용하기 때문에 최소힙을 간단히 PriorityQueue로 만들 수 있다. 사용법은 다음과 같다. 우선순위 큐 PriorityQueue 사용하기 (heap) (tistory.com) 우선순위 큐 PriorityQueue 사용하기 (heap) 최근 알고리즘 문제를 한개씩..
1900번: 레슬러 (acmicpc.net) 1900번: 레슬러 첫째 줄에 선수들의 수 N이 주어진다. 선수들은 1부터 N까지 번호가 붙어 있다. 다음 N개의 줄에는 한 줄에 한 선수의 힘과 그가 가진 마술 링의 힘이 주어진다. 선수 k의 정보는 k+1번째 줄에 주어 www.acmicpc.net 문제이해 이 문제는 레슬러의 순서를 출력하는 문제이다. 이문제의 가장 중요한 점은 돈을 가장 적게 써야한 다는 것으로 많이 이긴 사람 순으로 정렬해서 순서를 출력해야한다. 풀이 힘 링 번호 이긴 순으로 저장한 뒤 계산식을 통해 이긴 수를 저장한다. 이긴 수 별로 정렬해서 출력한다. import java.io.*; import java.util.*; public class test25 { public static ..
1874번: 스택 수열 (acmicpc.net) 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net 문제 이해 해당 문제의 경우 입력 값을 잘 살펴야 한다. 입력 값이 처음에는 숫자의 개수 그 후 수열이 나오는데 수열은 반듯이 스택을 통해 나올 수 있어야 한다. 예를 들어 1234의 경우 스택에 하나씩 넣고 빼는 방식으로 나올 수 있지만 4231의 경우 4는 가능 하지만 2의 경우 3이 먼저 나오지 않았기 때문에 만들 수 없는 수열..
1793번 제출 (acmicpc.net) 로그인 www.acmicpc.net 문제 이해 해당 문제의 경우 점화식을 계산해 문제를 해결하면 되는 문제이다. 하지만 점화식을 새우는 것을 실패해 검색을 통해 해결 했다. 다음블로그를 참고했다. [백준,BOJ 1793] 타일링( JAVA 구현) — 코오오딩 (tistory.com) [백준,BOJ 1793] 타일링( JAVA 구현) -내 생각 우선 타일링 문제를 비롯하여 dp문제들은 기본적으로 점화식 세우는 것이 굉장히 어렵게 느껴진다... 다른 분들의 글을 보면 대다수가 점화식만 써놓은 경우가 많아 왜 저런 점화식이 fbtmdwhd33.tistory.com 다음 블로그에서 점화식을 새우는 방법을 잘 설명해 놓았다. 요약하자면 다음과 같다. 가로가 n-1일때는 2..
1780번: 종이의 개수 (acmicpc.net) 1780번: 종이의 개수 N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1 중 하나가 저장되어 있다. 우리는 이 행렬을 다음과 같은 규칙에 따라 적절한 크기로 자르려고 한다. 만약 종이가 모두 같은 수 www.acmicpc.net 문제이해 해당 문제는 색종이에 색이 한개가 될때 까지 반복해서 색이한개가 된다면 그 때의 색종이의 색이 몇개가 되는 지 계산하는 문제이다. 풀이 1- 입력을 받는다. 2- 해당 색종이가 색들이 모두 같은 색인지 확인한다. 3- 색이 일치 하지 않는다면 3을 나누어 작은 색종이를 만든다. 4- 만든 색종이의 색일 일치하는지 확인한다. 5- 위의 과정을 반복해 모든 색종이의 색이 일치하면 종료한다. imp..
1485번: 정사각형 (acmicpc.net) 1485번: 정사각형 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 네 줄로 이루어져 있으며, 점의 좌표가 한 줄에 하나씩 주어진다. 점의 좌표는 -100,000보다 크거나 같고, 100,000보다 작거나 같 www.acmicpc.net 문제이해 해당 문제는 정사각형을 구하는 문제이다. 해당 문제는 풀이를 생각해 내지 못해 검색을 해보았다. 풀이 정사각형이란 4개의 변이 일치해야한다. 그렇다고 4개의 변만을 고려할 경우 마름모도 선택되게 된다. 즉 모든 변들의 길이를 구한뒤 (6개) 4개가 일치하고 2개가 일치 하면 된다. 이 과정에서 배열을 정렬하면 앞에 4개는 변 뒤의 두개는 대각선의 길이가 된다. import java.io.*; i..
1709번: 타일 위의 원 (acmicpc.net) 1709번: 타일 위의 원 한 변의 길이가 1cm인 정사각형 모양의 타일이 있다. 이 타일들이 큰 정사각형을 빈틈없이 채우고 있는데, 정사각형의 한 변의 길이는 짝수이다. 이 한 변의 길이를 Ncm이라고 하자. 큰 정사각형에 www.acmicpc.net 문제이해 해당 문제는 정사각형에서 그려진 가장 큰 원이 그려진 타일의 수를 구하는 문제이다. 타일의 크기는 1*1 정사각형이다. 문제풀이 주의 1. 해당 문제에서 원의 지름은 정사각형의 한 변과 동일하다 2. 정사각형의 좌표가 x,y라고 할때 (x - 1) * (x - 1) + (y - 1) * (y - 1) 반지름 제곱을 만족하면 해당 정사각형은 원이 그..
1431번: 시리얼 번호 (acmicpc.net) 1431번: 시리얼 번호 첫째 줄에 기타의 개수 N이 주어진다. N은 50보다 작거나 같다. 둘째 줄부터 N개의 줄에 시리얼 번호가 하나씩 주어진다. 시리얼 번호의 길이는 최대 50이고, 알파벳 대문자 또는 숫자로만 이루어 www.acmicpc.net 문제이해 해당 문제는 단순히 문자열을 입력 받아 정렬하는 문제이다. 문제를 푸는 방식은 다양하지만 자바를 이용함으로 Comparator를 이용해 문제를 해결했다. 풀이 조건에 따라 비교를 하면 된다. 글자 수가 다르면 작은게 먼저 글자수가 같다면 다음으로 진행 모든 수를 합쳐서 수가 크다면 큰순서대로 아니라면 다음으로 진행 사전순으로 정렬 이런식으로 진행 하면 된다. import java.util.Array..
1706번: 크로스워드 (acmicpc.net) 1706번: 크로스워드 동혁이는 크로스워드 퍼즐을 좋아한다. R×C 크기의 크로스워드 퍼즐을 생각해 보자. 이 퍼즐은 R×C 크기의 표로 이루어지는데, 퍼즐을 다 풀면 금지된 칸을 제외하고는 각 칸에 알파벳이 하나씩 www.acmicpc.net 문제이해 해당 문제는 입력받은 크로스 워드를 이용해 얻을 수 있는 가장 빠른 문자열을 찾는 문제이다. 문제풀이 1- 우선 입력을 받은 문자열 중에 만들 수있는 문자열을 찾는다. 2- 가로 세로 모든 문자열을 입력 받았다면 가장 빠른 문자열을 찾는다. 이 두 단계로 문제를 해결 할 수 있다. import java.io.BufferedReader; import java.io.InputStreamReader; import..