[백준] 1011번 : Fly me to the Alpha Centauri - 자바(java)
·
알고리즘/수학
문제 ❓ 문제 풀기 :  https://www.acmicpc.net/problem/1011문제 분석 ⏳최소횟수가 되기 위해서는 이동거리가 최대가 되어야 한다. 따라서 가능한(마지막 이동이 1이 될 수 있는) 숫자를 키워서 값을 구해야 한다.문제 해설 💡직접 구하기 😒이동거리를 키워나가면서 남은거리에서 점차 빼나갔다 이때 중요한 지점은 매번 계산마다 남은 거리안에 이동거리를 1까지 줄일 수 있는지를 계속해서 확인했다.이때 이동거리는 거리의 제곱근이상으로 커질 수 없다.(이유는123444321의 경우 24의 거리일때이다. 123454321 의 경우 25의 거리일때이다. 1234543211은 거리가 26일때이다.[즉, 순차적으로 상승,감소하는 경우의 거리는 어떠한 수의 제곱이 되므로 제곱을 기준으로 최대이..
[백준] 1092번 : 배 - 자바(java)
·
알고리즘/그리디 알고리즘
문제 ❓ 문제 풀기 : https://www.acmicpc.net/problem/1092문제 분석 ⏳문제에서 중요한 두가지가 있다.무게 제한보다 무거운 박스는 크레인으로 움직일 수 없다. 모든 박스를 배로 옮기는데 드는 시간의 최솟값을 구해야 한다.위 두가지 조건을 만족하기 위해서는 가장 큰 무게제한을 가진 크레인이 가장 큰 무게의 상자를 옮겨야한다.최적해를 구하는 그리디알고리즘 문제임을 알 수 있다.(그리디 알고리즘에 대해서는 나중에 작성하겠다.)문제 해설 💡arrayList를 활용하기로 한 후 크레인과 상자를 각각 craneList와 boxList에 값을 할당했다.가장 큰 무게를 옮길 수 있는 크레인이 가장 무거운 상자를 옮기게 하기 위해 각각의 List를 오름차순으로 정렬했다.첫번째 크레인(가장 ..
[이것이 취업을 위한 코딩 테스트다] 다이나믹 프로그래밍(Dynamic Programming)-(3) 퇴사 ([백준] 14501번 : 퇴사)- 자바(java)
·
알고리즘/다이나믹 프로그래밍((Dynamic Programming)
서론다이나믹 프로그래밍이라는 알고리즘 기법에 대해서 깊이있게 공부하던 중에 문제를 많이 풀어보면 습득하기 좋을거 같아. 이것이 취업을 위한 코딩 테스트다 with 파이썬-(동빈나)에 나오는 다이나믹 프로그래밍 문제를 풀어보며 공부하면 좋을거 같아 문제를 풀어보고 푸는 과정을 기록으로 남긴다.문제 문제 풀기 : https://www.acmicpc.net/problem/1904해설접근 방식기존에 풀었던 다이나믹 프로그래밍과 약간은 다른 방식이라 생소하게 다가와 처음에는 많이 당황스러웠다.계속 입력예시를 직접 손으로 적으며 고민하던중에 "작업이 끝나는 시간"에 집중해야 한다는 것을 깨달았다.1. 먼저 입력을 받는다.2. 입력 받은 값을 기준으로 각각의 작업이 시작하는 날과 끝나는 날을 같이 저장한다.3. 버블..
[백준] 1904번 : 01타일 - 자바(java)
·
알고리즘/다이나믹 프로그래밍((Dynamic Programming)
문제 풀기 : https://www.acmicpc.net/problem/1904문제 분석지원이가 만들 수 있는 길이 N의 2진 수열의 개수를 구해야 합니다. 이때 타일은 다음 규칙을 따릅니다:'1'로만 이루어진 타일'00'로 이루어진 타일이 규칙으로 인해 2진 수열은 특정한 방식으로만 조합될 수 있습니다. 예를 들어:N=1 : 1개(1)N=2 : 2개(00, 11)N=3 : 3개(001, 100, 111)N=4 : 5개(0000, 0011, 1001, 1100, 1111)N=5 : 8개 (11111 10000 00100 00001 11100 11001 10011 00111)N=6 : 13개N=7 : 21개N= 8 : 34개N= 9 : 55개N= 10 : 89개잘못된 접근초기 접근: 조합을 통한 계산처음엔..