공부/알고리즘
-
[hackerrank] Sherlock and Array python공부/알고리즘 2021. 9. 11. 13:00
무난하게 풀었던 것같다. 1. 먼저 arr의 totalSum을 구하고, leftSum, rightSum을 초기화 해주자 2. for문을 돌려서 i > 0일때 leftSum += arr[i-1], rightSum = totalSum - arr[i] - leftSum 즉, 인덱스가 하나씩 늘어날때마다 leftSum과 rightSum을 구해주자. 3. leftSum == rightSum 이면 return YES for문이 다돌면 return NO def balancedSums(arr): # Write your code here totalSum = sum(arr) leftSum = 0 rightSum = 0 for i in range(len(arr)): if i > 0: leftSum += arr[i-1] ri..
-
[hackerrank] Missing Numbers python공부/알고리즘 2021. 9. 11. 00:38
이전 문제와 같이 해시테이블 즉, python dictionary를 이용해보았다. dictionary에서 주로 key in dict 이렇게 key값이 있는지 판별하는 in은 dictionary에서 시간 복잡도가 O(1)이다. (문제 키포인트) 1. 우선 arr, brr의 value들을 key값으로, 갯수를 value로 하는 dictionary를 각각 만들고 2. brr[i] in arrDic으로 빠진 것들을 찾아준다. 3. 빠진것들을 answerList에 append해주고 중복을 제거한뒤 sort해준다. *아쉬운점 answerList에 중복된 수가 발생된다는것, 중복된 원소가 빠졋을때 그만큼 더 연산을 하는것 ... def missingNumbers(arr, brr): # Write your code h..
-
[hackerrank] Ice Cream Parlor python공부/알고리즘 2021. 9. 11. 00:06
처음에 그냥 딱히 생각이 안나서 O(N^2)풀이로 풀었는데 100% 정답이 뜨긴 했지만, 실제 코딩테스트에서는 O(N)시간 복잡도를 요구하는 것 같은 문제라 시간을 줄여 보았다. dictionary를 이용해서 문제를 풀어보았다 (키포인트) 1. 가격을 key값으로, 문제의 indices를 value로 dictionary를 생성하고, for문을 돌려보자. 2. arr의 0번째 인덱스부터 시작해서 for문이 돌면서 dictionary에 m-arr[i] 즉, cost = [1, 4, 5, 3, 2]이 있을때 1 4 5 를 거치면서 3을 만났을때 생성된 1의 key값을 가진 값이 dictionary에 있기때문에 return [priceDic[m-arr[i]], i+1]을 해주면 오름차순으로 정답을 찾을 수 있다..
-
[hackerrank] Maximum Perimeter Triangle python공부/알고리즘 2021. 9. 10. 11:41
sticks의 원소들 중 삼각형이 되는 3개의 원소들 중 가장 큰 변을가지고, 중복된 가장 큰 변을 가질때 최소길이의 변이 최대인 3개의 변을 return 해주는 문제이다. 1. sticks를 sort해주자. 2. maxIndex가 1보다 클때까지 while문을 돌려서 후보가 될 3변을 구하자. sort를 한뒤 아래와 같이 while문을 돌리면 문제의 조건과 부합하는 세변의 원소들이 answerList에 쌓이게 된다. 3. answerList의 크기가 0이면 return -1, 그렇지 않다면 answer를 return 해주자. def maximumPerimeterTriangle(sticks): # Write your code here sticks.sort() maxIndex = len(sticks) - ..
-
[hackerrank] Grid Challenge python공부/알고리즘 2021. 9. 10. 02:48
그냥저냥 풀었던 무난한 문제였다. 1. 우선 grid상의 각 원소를 ascending order로 정렬하여주고 2. grid[0~n-1][0], grid[0~n-1][1] ... 즉 각 원소의 column이 ascending order인지 확인해 주었다. 작성하고 시간복잡도 때문에 fail하지 않을까 생각했는데 아니였지만 조금 아쉽긴 하다. def gridChallenge(grid): # Write your code here for i in range(len(grid)): convertAsc = list(grid[i]) convertAsc.sort() convertStr = ''.join(convertAsc) grid[i] = convertStr for i in range(len(grid[0])): co..
-
[hackerrank] Minimum Absolute Difference python공부/알고리즘 2021. 9. 9. 16:35
이번에 시험보는 넥슨 코딩테스트를 hackerrank에서 진행한다고 하여서 hackerrank에 올라와 있는 문제를 쭉 풀어보려한다. Greedy 유형에 포함된 이문제는 list안에 있는 원소 중 2개 간의 절대값의 차이의 최소값을 구하는 문제이다. 1. 절대값의 차이가 최소라면 sort했을때 서로 가장 가까운 거리에 있겠구나! (key point) 2. sort를 하면, for문을 돌릴때 arr[i+1] - a[i]값은 당연히 양수이겠구나! 3. 또한 조금 더 시간을 줄이기 위해 arr[i+1] - a[i]가 0이되면 바로 0을 return 해주자. 4. minDif를 초기값을 무한으로 놓고 Dif와 비교해주며 갱신하자. sort할 생각 못했으면 조금 오래 걸렸을 것 같다.... def minimumA..