문제 (못품)
접근법 : 처음에는 현재위치에 첫번째 주유비용을 넣고 뒤로 쭉 주유비용을 비교하면서 더 낮은 주유비용을 만나면 만날때까지 만났던 거리들을 다 곱해서 answer에 더해준 후 더 낮은 주유비용의 위치를 현재위치로 바꿔줘서 다시 비교를 수행하고 마지막 answer을 출력하려고 했다. 근데 아이디어만 생각날 뿐 막상 코드로 구현하려하니 구현이 되지 않았다. 반복문의 설계를 어떻게 해야 하고 주유비용과 거리의 i,j는 어디서 부터 어디까지 정해야할지 감도 안와서 결국 해답을 찾아봤고 더 효율적인 코드로 수정해서 작성했다.아무리 좋은 접근법을 갖고있더라도 그 아이디어를 코드로 구현못한다는것이 내 자신에 대해 아쉽고 답답했다. 애초에 내가 가진 접근법보다 더 나은 접근법이 수두룩하니 내가 생각한 접근법에서 만족하지 않고 더 나은 접근법이 있나 찾아봐야겠다. 아무리 좋은 아이디어라도 1시간 걸려 실제 코드로 구현하는것 보다 10분짜리 아이디어로 구현하는게 더 좋으니까
해결법 : 솔루션에서는 거리와 주유비용을 배열로 넣어줬고, 주유비용 배열에서는 첫번째 주유비용은 고정 그 이후에는 낮은 값(최소 주유비용으로) 뒤에 값들을 업데이트 해줬다.
단 주어진 입력이 값이 매우 큰 범위를 갖고 있기 때문에 BigInt를 사용했는데, BigInt 사용시 숫자뒤에 n이 붙여 나오므로 n을 삭제해주기 위해 숫자를 문자로 바꿔줬다.
위에는 내가 처음 생각한 접근법이다. 시작시점을 오름차순으로 정렬하고 현재 값보다 큰 값이 있을시 cnt+1하고 큰값에 다시 넣어주어 재귀함수로 모든 경우의 수를 cnt로 받으려고 했으나 실행되지 않았다.
해결법 : 시작 시간이 빠르지만 끝나는 시간이 너무 늦어버리면 다음 회의를 하지 못하는 경우가 생길 수 있다. 그래서 최대한 회의실을 사용하기 위해서는 끝나는 시간이 빨라야 한다. 그래야 다음 회의들을 최대한 이용할 수 있다.때문에 끝나는 시간대로 오름차순 정렬하고 최소의 끝나는 시간과 각 배열 인덱스의 시작 시간을 비교하고 다음인덱스의 시작시간이 끝나는 시간보다 같거나 크다면 위치를 최소시간을 옮겨주고 카운트를 올려준다.
접근법 : 처음에는 단순히 다음 인덱스가 증가할때 그 값이 현재 인덱스 -1 이면 카운트를 올리는 것인가 했다.
해결법 :
이런식으로 초기화된값이 있을때 순서대로 4가 들어온다면 배열에 4값이 없으므로 카운트를 올려주고 3위치에 화살 1개를 저장한다. 다음 5가 들어오면 5위치에 화살이 없으므로 4위치에 화살1개를 저장하고 카운트를 올려준다. 다음 4가 들어올땐 4위치에 화살이 있으므로 카운트는 그대로 두고 4위치에 화살을 3위치로 옮겨준다.
해결법 : 피보나치 수열문제이다. 피보나치 배열에 첫값과 2번째값 0,1을 미리 넣어주고 문제에서 주어진 피보나치 수열 범위 n ≤ 1,000,000,000. 를 맞추기 위해 반복문의 조건으로 피보나치 배열 마지막 숫자가 1,000,000,000보다 작아질때 까지 피보나치 배열에 피보나치 수를 넣어줬다.
이후에 반복문으로 숫자를 받아주고 숫자가 0일때까지 제일큰 피보나치 수열값에서 빼주고 n값을 업데이트하고 결과 배열에 가장 큰 순서대로 값을 넣어주었다. 왜냐하면 어떠한 숫자든 피보나치 수열 값으로 빼주면 그 뺀 값은 또 피보나치 수로 만들 수 있기 때문이다.