문제 - 현재 3대 운동 중량 500 - 하루가 지날 때마다 중량이 K만큼 감소 - N개의 서로 다른 운동 키트 보유 - 운동 키트들은 각각의 중량 증가량을 가지고 있으며, 사용할 때마다 즉시 중량이 증가 - 운동 기간동안 항상 중량이 500 이상으로 유지가 되도록 N일간의 운동 플랜을 세우고 이 경우의 수를 출력 해결방법 운동 키트 적용 순서를 순열을 이용하여 정하고, 적용 순서가 정해지면 하루하루 중량이 감소하고 운동을 통해 보충한 중량 증가량을 계산하여 500 이상을 유지하는지를 확인할 수 있도록 하였다. permutation 함수를 이용하여 순열을 통해 운동 키트 적용 순서를 짰고, N개(운동 키트 개수)만큼 순서를 짰다면 중량을 계산하여 조건에 따라 경우의 수를 계산하였다. 코드 import j..
문제 - 1번 방에서 출발해서 n번 방으로 도착이 목표 - 갈 수 있다면 Yes, 갈 수 없다면 No 출력 - 각 방 안에는 번호가 붙은 문이 있을 수 있고, 각 문은 해당하는 번호의 방으로 통함 - 방 안에는 레프리콘이나 트롤이 있을 수도 있음 - 레프리콘이 있는 방에 들어가면 소지금이 일정 양 이하로 떨어지지 않게 채워줌 (일정량 미만이면 그만한 양이 되도록 채워주고, 이상이면 그대로 둠) - 트롤이 있는 방에 들어가면 일정량의 통행료를 지불해야 함 해결방법 방문한 곳을 체크하면 각 방을 DFS로 탐색하여 목표하는 방까지 탐색하였다. 문제에 제시된 조건에 따라 레프리콘과 트롤을 만났을 때, 조건을 처리해주었으며 소지금이 바닥나면 해당 함수를 탈출할 수 있게 구현하였으며, 재귀적으로 탐색할 수 있도록 ..
문제 - 점 N개가 주어짐(x, y) - 해당 좌표들을 y 좌표가 증가하는 순으로 정렬 - y 좌표가 같으면 x 좌표가 증가하는 순서로 정렬 해결방법 Point class를 만들어서 좌표를 Point 배열로 저장하였다. 해당 좌표들을 정렬하기 위해 Comparator를 만들었고, 주어진 조건대로 x 좌표가 증가하는 순으로 정렬하였다. x 좌표가 같다면 y 좌표가 증가하는 순서로 정렬할 수 있도록 조건을 주었다. 이전에 풀었던 11650번 좌표 정렬하기 문제와 똑같이 해결하였다. [백준] 11650번 좌표 정렬하기(JAVA) 문제 - 점 N개가 주어짐(x, y) - 해당 좌표들을 x 좌표가 증가하는 순으로 정렬 - x 좌표가 같으면 y 좌표가 증가하는 순서로 정렬 해결방법 Point class를 만들어서 ..
문제 - N개의 스위치와 N개의 전구 - i(1
문제 - 주어진 정수 s의 값을 t로 바꾸는 최소 연산 순서 구하기 - s = s + s; (출력 : +) - s = s - s; (출력 : -) - s = s * s; (출력 : *) - s = s / s; (출력 : /) (s가 0이 아닐 때만 사용 가능) - s와 t가 같은 경우에는 0 - 바꿀 수 없는 경우에는 -1 - 가능한 방법이 여러 가지라면, 사전 순(*, +, -, /)으로 앞서는 것을 출력 해결방법 최소 연산 순서를 구하는 것이기 때문에 BFS로 해결하였다. 계산한 숫자와 이전에 계산했던 연산 기호도 저장해야하므로 클래스를 하나 만들었다. 어떤 연산을 통해 만들어진 숫자인지 연산기호를 저장하기 위한 cal 변수, 만들어진 숫자를 저장하기 위한 num 변수로 이루어진 Calculate 클..
문제 - 수빈이는 점 N(0
문제 - 점 N개가 주어짐(x, y) - 해당 좌표들을 x 좌표가 증가하는 순으로 정렬 - x 좌표가 같으면 y 좌표가 증가하는 순서로 정렬 해결방법 Point class를 만들어서 좌표를 Point 배열로 저장하였다. 해당 좌표들을 정렬하기 위해 Comparator를 만들었고, 주어진 조건대로 x 좌표가 증가하는 순으로 정렬하였다. x 좌표가 같다면 y 좌표가 증가하는 순서로 정렬할 수 있도록 조건을 주었다. 객체 정렬과 관련된 내용은 아래 글을 참고하면 좋을 것 같다. [JAVA] Comparable / Comparator 객체들을 정렬하기 위해서는 정렬 기준이 필요하다. 단순한 숫자, 문자와 같은 기본형(primitive) 데이터는 Arrays.sort() 메서드를 이용하여 알아서 정렬할 수 있다...
문제 - 정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수 구하기 - n은 양수, 11보다 작음 - 정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지(1+1+1+1, 1+1+2, 1+2+1, 2+1+1, 2+2, 1+3, 3+1) 해결방법 1, 2, 3으로 조합해서 경우의 수를 구하는 것이기 때문에 1, 2, 3을 만들 수 있는 방법을 먼저 생각해보았다. 1은 1 밖에 없으므로 경우의 수 1이다. (dp[1] = 1) 2는 1+1, 2 이므로 경우의 수 2이다. (dp[2] = 2) 3은 1+1+1, 1+2, 2+1, 3 이므로 경우의 수는 4이다. (dp[3] = 4) 4는 1+3, 2+2, 3+1로 나타낼 수 있다. 1. 1+3일 때, 3을 만드는 경우의 수는 4이다..