백준 3

백준 12852(JAVA)

문제 정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다. X가 3으로 나누어 떨어지면, 3으로 나눈다. X가 2로 나누어 떨어지면, 2로 나눈다. 1을 뺀다. 정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오. 풀이 dp로 풀면 시간초과가 나지않을수 있다. 일단 현재 어떠한 수를 i(1 과 입력되는 N사이의 임의의 수) 라 하면 i의 연산의 최소횟수는 i - 1 수의 연산의 최소횟수, i / 3(나머지가 0이라면) 수의 연산의 최소횟수, i / 2(나머지가 0이라면) 수의 연산의 최소횟수의 의 가장 작은 값에 + 1을 한것이다. 그리고 연산되는 방법의 수는 List list = new ArrayList();로 Li..

algorithm 2021.07.26

백준 9009(JAVA)

문제 입력되는 수에 대해서 최소의 개수의 피보나치의 합이 어떠한 수가 되는 피보나치 수들을 구하여라 풀이 문제를 보자마자 든 생각은 일단 dp테이블에 피보나치의 결과를 메모이제이션 해야겠단 생각이 들었다. 피보나치의 합을 구하는데 피보나치의 개수가 최소의 개수가 되야하므로 입력되는 정수 num에 가장 근접한(같거나 작은) 피보나치의 결과를 num에서 빼나가면 되겠단 생각이들었다. 어떠한 수는 피보나치 하나의 값이거나 여러개의 합으로 구성될수 있으므로 어떠한 수가 입력되던간에 정답은 나온다. 입력되는 수에 가장 근접한 수를 빼나가면 최소의 개수의 피보나치일것이다. 즉, 그리디알고리즘이다. 코드 package baekjoon.그리디; import java.io.*; import java.util.ArrayL..

algorithm 2021.07.14

백준 17413(JAVA)

문제 주어진 문자열 S중 단어만 찾아서, 단어만 뒤집어라 문제 자체는 이해하기가 쉽다. 단어는 태그가 아니며, 단어끼리는 ' ' 공백으로 띄워져있다. 풀이 단어가 시작하는 index를 저장할 start변수를 통해 현재 index까지의 StringBuilder를 만들고 reverse()메서드로 뒤집은뒤 replace메서드로 다시 부분 문자열을 변경하면 된다! java로 풀면 불변 클래스인 String으로는 데이터 수정이 되지않으므로 StringBuilder로 하는것이 적절하다.(String은 새로운 객체를 생성함, 하나의 인스턴스에서 수정이 되지않음) 코드 package baekjoon.구현; import java.io.*; public class Main17413 { static Strin..

algorithm 2021.07.12