본문 바로가기
728x90

코딩/백준-자바88

[자바] 백준 7562번: 나이트의 이동 https://www.acmicpc.net/problem/7562 7562번: 나이트의 이동 체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수 www.acmicpc.net bfs로 풀었다. 이동가능한 8가지의 방향으로 다음 위치를 계산하고 다음 위치가 체스판을 넘어가지 않고, 방문한 적 없다면 큐에 넣는다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.Queue; i.. 2023. 1. 9.
[자바] 8979번: 올림픽 https://www.acmicpc.net/problem/8979 8979번: 올림픽 입력의 첫 줄은 국가의 수 N(1 ≤ N ≤ 1,000)과 등수를 알고 싶은 국가 K(1 ≤ K ≤ N)가 빈칸을 사이에 두고 주어진다. 각 국가는 1부터 N 사이의 정수로 표현된다. 이후 N개의 각 줄에는 차례대로 각 www.acmicpc.net int[][] arr= new int[n][5] 배열을 만들었다. arr[] => {국가번호, 금메달, 은메달, 동메달, 등수} 이다. arr에 정보를 입력받은 후, 금메달>은메달>동메달 순으로 정렬한다. (Arrays.sort , comparator 이용) 이후, 등수를 책정하는데 점수가 같은 국가는 공동순위를 받아야 하므로 이전 국가와 비교해서 금은동 개수가 같으면 이전국.. 2023. 1. 9.
[자바] 백준 1110번: 더하기 사이클 https://www.acmicpc.net/problem/1110 1110번: 더하기 사이클 0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, www.acmicpc.net import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class P1110 { public static void main(String[] args) throws NumberFormatException, IOException { BufferedReader br .. 2023. 1. 9.
[자바] 백준 1068번: 트리 https://www.acmicpc.net/problem/1068 1068번: 트리 첫째 줄에 트리의 노드의 개수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 0번 노드부터 N-1번 노드까지, 각 노드의 부모가 주어진다. 만약 부모가 없다면 (루트) -1이 주어진다 www.acmicpc.net 트리에서 삭제할 노드를 입력받고 삭제할 노드와 그 하위 노드들의 parent[]값을 -2로 바꾸었다. 이후, 리프노드의 수를 출력한다. 리프노드는 재귀함수로 작성했는데, 자식이 없는경우 => 자신이 리프노드이므로 1 리턴 자식이 있는경우 => 자식노드들의 리프노드의 합 리턴 한다. import java.io.BufferedReader; import java.io.IOException; imp.. 2023. 1. 8.
[자바] 백준 12851번: 숨바꼭질2 https://www.acmicpc.net/problem/12851 12851번: 숨바꼭질 2 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 www.acmicpc.net 저번에 푼 문제는 최단경로를 하나 출력하면 됐는데, 이번에는 최단경로의 개수를 출력해야 한다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.Queue; imp.. 2023. 1. 7.
[자바] 백준 13913번: 숨바꼭질 4 https://www.acmicpc.net/problem/13913 13913번: 숨바꼭질 4 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net 처음 시도했던 풀이는 바텀업 방식으로, dp[0]부터 dp[k]까지 최소 이동횟수를 저장하는 식으로 했다. 최소경로 출력에서 잘못된 건지 이동횟수가 잘못계산된 건지 답이 자꾸 틀렸다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import j.. 2023. 1. 6.
[자바] 백준 5639번: 이진 검색 트리 https://www.acmicpc.net/problem/5639 5639번: 이진 검색 트리 트리를 전위 순회한 결과가 주어진다. 노드에 들어있는 키의 값은 106보다 작은 양의 정수이다. 모든 값은 한 줄에 하나씩 주어지며, 노드의 수는 10,000개 이하이다. 같은 키를 가지는 노드는 없다 www.acmicpc.net 자료구조 시간에 배웠던 이진트리를 그대로 구현했다 값을 입력받아 이진트리를 구성하고, 실제로 만들어진 이진트리를 후위순회하며 값을 출력한다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class P5639 { static class Node{ int .. 2023. 1. 6.
[자바] 백준 1010번: 다리 놓기 https://www.acmicpc.net/problem/1010 1010번: 다리 놓기 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 < N ≤ M < 30)이 주어진다. www.acmicpc.net 문제는 간단히 n,r을 입력받아 nCr을 출력하면 된다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class P1010 { static int[][] dp = new int[31][31]; public.. 2023. 1. 4.
[자바] 백준 13904번: 과제 https://www.acmicpc.net/problem/13904 13904번: 과제 예제에서 다섯 번째, 네 번째, 두 번째, 첫 번째, 일곱 번째 과제 순으로 수행하고, 세 번째, 여섯 번째 과제를 포기하면 185점을 얻을 수 있다. www.acmicpc.net 점수가 높은 순으로 과제들을 정렬한다. 과제를 하나씩 뽑는다. 가능한 한 마감일에 가까운 날짜에 (최대한 늦게) 과제를 해결하고 점수를 추가한다 만약 마감일 내에 스케줄이 꽉 차 있으면 해당 과제는 포기한다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Comparator; import ja.. 2023. 1. 4.
[자바] 백준 1461번: 도서관 https://www.acmicpc.net/problem/1461 1461번: 도서관 세준이는 도서관에서 일한다. 도서관의 개방시간이 끝나서 세준이는 사람들이 마구 놓은 책을 다시 가져다 놓아야 한다. 세준이는 현재 0에 있고, 사람들이 마구 놓은 책도 전부 0에 있다. 각 책 www.acmicpc.net 원점으로부터 먼 곳부터 돌면서 m개씩 한번에 반납한다. 마지막 한 번은 원점까지 돌아올 필요가 없으므로 가는길 만큼만 더해준다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Collections; import java.util.LinkedList; im.. 2023. 1. 3.
[자바] 백준 2668번: 숫자고르기 https://www.acmicpc.net/problem/2668 2668번: 숫자고르기 세로 두 줄, 가로로 N개의 칸으로 이루어진 표가 있다. 첫째 줄의 각 칸에는 정수 1, 2, …, N이 차례대로 들어 있고 둘째 줄의 각 칸에는 1이상 N이하인 정수가 들어 있다. 첫째 줄에서 숫자를 적절 www.acmicpc.net 1행에 있는 숫자들을 선택했을 때... 아래 2행에 있는 숫자들이 똑같은 집합을 가져야 한다. 뭔가 정확히는 모르겠지만 숫자들끼리 연결이 있어야 할 것 같아서 이리저리 끄적이다가 출발노드에서 dfs과정을 거쳐서 다시 내 노드로 돌아온다면 조건에 적합하다는걸 알았다. 그래서 모든 노드에 대해서 이 조건이 적합한지 알아내서, 적합하다면 리스트에 추가했다. import java.io.Buf.. 2023. 1. 3.
[자바] 백준 1197번: 최소 스패닝 트리 https://www.acmicpc.net/problem/1197 1197번: 최소 스패닝 트리 첫째 줄에 정점의 개수 V(1 ≤ V ≤ 10,000)와 간선의 개수 E(1 ≤ E ≤ 100,000)가 주어진다. 다음 E개의 줄에는 각 간선에 대한 정보를 나타내는 세 정수 A, B, C가 주어진다. 이는 A번 정점과 B번 정점이 www.acmicpc.net 저번 여름방학 때 이코테 책으로 배우고 저번학기 자료구조 수업에서도 배웠던 트리. 저번엔 파이썬,C언어로 했지만 이번에는 자바로 작성해서 익숙한듯 익숙하지 않았다 2022.08.08 - [파이썬 공부/이코테] - 8. 기타 그래프 이론: 크루스칼 알고리즘 2022.11.22 - [학교공부/자료구조] - Biconnected Components/최소 비.. 2023. 1. 2.
[자바] 백준 2864번: 5와 6의 차이 https://www.acmicpc.net/problem/2864 2864번: 5와 6의 차이 첫째 줄에 두 정수 A와 B가 주어진다. (1 2023. 1. 2.
[자바] 백준 1041번: 주사위 https://www.acmicpc.net/problem/1041 1041번: 주사위 첫째 줄에 N이 주어진다. 둘째 줄에 주사위에 쓰여 있는 수가 주어진다. 위의 그림에서 A, B, C, D, E, F에 쓰여 있는 수가 차례대로 주어진다. N은 1,000,000보다 작거나 같은 자연수이고, 쓰여 있는 수 www.acmicpc.net 주사위를 모아놓으면.. 어떤 주사위는 세 면이 보일것이고, 어떤 주사위는 두 면만, 어떤 주사위는 한 면만 보일것이다. . . 주사위가 N^3개일 때 세 면, 두 면, 한 면이 보이는 주사위가 몇개일지 계산했다. 그리고 나서 세 면이 보일 때 최솟값, 두 면이 보일 때 최솟값을 구하는데.. 여러가지 조합이 너무 많았다... 어쩔 수 있나?..보이는 조합을 다 적는 노가다를 .. 2023. 1. 2.
[자바] 백준 10610번: 30 https://www.acmicpc.net/problem/10610 10610번: 30 어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한 www.acmicpc.net 3의 배수의 특성을 알면 간단하게 풀 수 있다. N의 모든 자릿수의 값을 더한 값이 3의 배수이면 N는 3의 배수이다. 문제에서는 3의 배수가 아니라 30의 배수여야 하는데, 3의 배수인 숫자에 0 하나 붙여주면 간단하게 30의 배수를 만들 수 있다. 따라서 모든 자릿수의 합이 3의 배수 숫자에 0이 존재 두 조건을 만족시키면 된다. 가장 큰 수를 만들기 위해서는 각 자릿수의 값을 내림차순으로 정렬.. 2023. 1. 2.
[자바] 백준 1449번: 수리공 항승 https://www.acmicpc.net/problem/1449 1449번: 수리공 항승 첫째 줄에 물이 새는 곳의 개수 N과 테이프의 길이 L이 주어진다. 둘째 줄에는 물이 새는 곳의 위치가 주어진다. N과 L은 1,000보다 작거나 같은 자연수이고, 물이 새는 곳의 위치는 1,000보다 작거나 www.acmicpc.net 테이프 하나로 붙일 수 있는 곳은 한번에 다 붙인다 라는 생각으로 풀었다 우선 구멍난 곳의 위치를 오름차순으로 정렬 해 둔다(그럼 앞에 있는 구멍부터 볼 수 있다) 앞에있는 구멍부터 테이프를 하나씩 뜯어서 구멍을 막을건데 뜯은 테이프로 같이 막을 수 있는 구멍은 같이 막자. 테이프의 시작위치는 구멍-0.5, 테이프의 끝나는 위치는 구멍-0.5+L이다. 테이프의 끝나는 위치보다 안에.. 2023. 1. 2.
[자바] 백준 2812번: 크게 만들기 https://www.acmicpc.net/problem/2812 앞에 있는 수를 최대한 큰 수로 만들어야한다 스택을 사용한다. TOS의 값과 새로 넣을 값을 비교해서, 새 값이 더 작거나 같으면 그대로 push한다. 새 값이 더 크다면, 앞에있는 작은 숫자들을 뺄 수 있는 만큼(k개 제한) pop한다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Stack; import java.util.StringTokenizer; public class P2812 { public static void main(String[] args) throws IOExcepti.. 2023. 1. 1.
[자바] 1107번: 리모컨 https://www.acmicpc.net/problem/1107 1107번: 리모컨 첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼 www.acmicpc.net 고장나지 않은 버튼들을 이용해서 채널N에 가장 근접한 채널을 찾아서..풀려고 했다. N보다 크거나 같은 수로 접근하는 것 하나, N보다 작거나 같은 수로 접근하는 것 하나씩 만들어서 두 경우를 비교하려고 했다. 숫자를 한 자릿수씩 끊어서, 그 숫자에 해당하는 버튼이 고장났다면 숫자를 1 올려보고.. 이런식으로 만들려 했는데.. 너무나도 고려할 부분이 많았다. (버튼 9를 쓰지 못하.. 2023. 1. 1.
[자바] 백준 1092번: 배 https://www.acmicpc.net/problem/1092 1092번: 배 첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 각 크레인의 무게 제한이 주어진다. 이 값은 1,000,000보다 작거나 같다. 셋째 줄에는 박스의 수 M이 주어진다. M은 10,000보 www.acmicpc.net 빨리 박스들을 다 옮기기 위해서 크레인은 자기가 들 수 있는 가장 무거운 박스를 옮겨야 한다. . . 크레인이 들 수 있는 무게를 내림차순으로 정렬 박스의 무게를 내림차순으로 정렬한다. 크레인 배열을 하나씩 순회하면서 들 수 있는 박스가 있으면 해당 박스를 든다(최대한 무거운거). 모든 크레인을 한번 씩 다 돌았으면 time을 1 증가시킨다. 다시 남아있는 박스들로 반복한다. 박스.. 2022. 12. 31.
[자바] 백준 1049번: 기타줄 https://www.acmicpc.net/problem/1049 1049번: 기타줄 첫째 줄에 N과 M이 주어진다. N은 100보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 각 브랜드의 패키지 가격과 낱개의 가격이 공백으로 구분하여 주 www.acmicpc.net 술술 풀다가 실수해서 틀릴것 같은 문제 패키지가격과 낱개가격의 최솟값을 구해놓은 후, 1. 낱개*6개 가격이 패키지가격보다 싼 경우, 기타줄 개수만큼 모두 낱개로 구매 2. 패키지로 사고, 나머지 줄은 낱개로 사는 경우 3. 패키지로 사고, 나머지 줄도 패키지로 사는 경우 이 세가지 경우로 나누어 풀었다. import java.io.BufferedReader; import java.io.IOE.. 2022. 12. 31.
728x90