알고리즘

· 알고리즘
이 문제는 2억개의 수를 가지고 문제를 푸는 것이다. 모든 것을 확인하게 된다면 천만개에 1초니깐 20초가 걸리게된다. 따라서 예외처리를 해줘야 하겠다. 첫 번째 생각. 숫자 자리수가 1개이상 차이나게 된다면 ex ) 99, 100 이런식으로 만들어 지게된다. 자리수가 넘어갈 때, 처음 수는 10의 배수이므로 8이 들어가는 개수가 0개이다. : 이방법으로 1,000,000,000-1, 과 2,000,000,000를 비교할 때가 가장 많은 수를 비교하는 과정이된다. 즉, 최대 시간 소모가 10초로 줄어들게 된다. 두 번째 생각 숫자 자리수가 동일한 경우 ex) 8800, 8808 이라면 앞자리 수 부터 확인해서 같은 숫자일때까지만 8의 개수를 체크한다. 비교하는 값이 달라지면 그 뒷자리 수부터는 8을 제외..
· 알고리즘
이 문제는 보자말자 dp로 풀어야겠다 라고 생각했었습니다. 2일까지만 할수 있는 결석, 1번만 할수 있는 지각과 출석을 만약 순열로 푼다면 엄청난 조건들이 생길것이라 판단해서 바로 기각 그 다음 생각한 것이 dp밖에 없다고 생각했기 때문입니다. 다만 이전 일자로부터 다음 일자를 어떤 방법으로 채울수 있을까 고민했었습니다. 처음 생각한 방법은 list를 3중으로 해서 [현재 일자][0 : 어제 지각, 결석 정보][1 : 이틀전 지각, 결석 정보] 리스트를 2개를 가지고 이틀전 지각, 결석 정보 하루전 지각, 결석 정보를 확인한 다음 이것으로 판단해야겠다고 생각했습니다. 그래서 boolean으로 값들을 정리하고 count하는 방법을 생각했는데요. 문제는 각 경우의 수마다 dp 값들이 달라진다는 것! 그래서 ..
· 알고리즘
1 x 1 크기의 칸들로 이루어진 직사각형 격자 형태의 미로에서 탈출하려고 합니다. 각 칸은 통로 또는 벽으로 구성되어 있으며, 벽으로 된 칸은 지나갈 수 없고 통로로 된 칸으로만 이동할 수 있습니다. 통로들 중 한 칸에는 미로를 빠져나가는 문이 있는데, 이 문은 레버를 당겨서만 열 수 있습니다. 레버 또한 통로들 중 한 칸에 있습니다. 따라서, 출발 지점에서 먼저 레버가 있는 칸으로 이동하여 레버를 당긴 후 미로를 빠져나가는 문이 있는 칸으로 이동하면 됩니다. 이때 아직 레버를 당기지 않았더라도 출구가 있는 칸을 지나갈 수 있습니다. 미로에서 한 칸을 이동하는데 1초가 걸린다고 할 때, 최대한 빠르게 미로를 빠져나가는데 걸리는 시간을 구하려 합니다. 미로를 나타낸 문자열 배열 maps가 매개변수로 주어..
· 알고리즘
고민! 해당 문제는 5kg, 3kg에 대해 모두 고려해야 되는 문제였습니다. greedy! 처음에는 5kg으로 빼면 되겠지라고 생각했지만 정확하지 않으면 -1이라는 조건 이것을 해결하기 위해 N이 5000kg이라는 사실을 이용했습니다. 3kg의 최대 개수는 1333개라는 것! 그래서 1333부터 하나씩 빼면서 적용했습니다. 하지만 java로 적용할때에는 n을 5로 나눈 그 숫자가 몇개인지를 통해 5kg의 최대 숫자를 적용했습니다. 그리고 한개씩 빼주면서 3kg으로 나눠떨어지는지 확인하면 최소 개수로 떨어지는 개수를 알수 있었습니다. python으로 적용했을 때, size = int(input()) result = [] for i in range(1333,0,-1): if (size - (5*i)) ==0..
시이지
'알고리즘' 카테고리의 글 목록
상단으로