[HackerRank] Mini-Max Sum
2021. 11. 21. 16:36
알고리즘
# Mini-Max Sum (Warmup) [문제] [코드] void miniMaxSum(vector arr) { long sum = 0; for(int i = 0; i sum-arr[i] ? max : sum-arr[i]; min = min < sum-arr[i] ? min : sum-arr[i]; } cout
[HackerRank] Sherlock and Array
2021. 11. 21. 16:21
알고리즘
# Sherlock and Array (Search) [문제] [코드] string balancedSums(vector arr) { int leftSum = 0; int rightSum = 0; for(int i=0; i < arr.size(); i++) rightSum += arr[i]; for(int i = 0; i < arr.size(); i++) { rightSum -= arr[i]; if(leftSum == rightSum) return "YES"; leftSum += arr[i]; } return "NO"; } [코드설명] 주어진 정수 배열에서 기준의 좌, 우 원소들의 합이 같은지 확인하는 문제다. 기준(arr[i])에서의 leftSum과 rightSum을 구한 후, 비교해 풀었다. 원소들의 ..
[HackerRank] Plus Minus
2021. 11. 5. 18:18
알고리즘
# Plus Minus (Warmup) [문제] [코드] void plusMinus(vector arr) { double plus = 0; double minus = 0; double zero = 0; set sorted; for(int i = 0; i 0) plus++; else if(arr[i] < 0) minus++; else zero++; } plus /= arr.size(); minus /= arr.size(); zero /= arr.size(); cout
[HackerRank] Closest Numbers
2021. 11. 5. 18:03
알고리즘
# Closest Numbers (Sorting) [문제] [코드] vector closestNumbers(vector arr) { set sort; for(int i=0; isecond; } [코드설명] 두 수의 차가 제일 작은 수들을 정렬하는 문제다. (중복 허용) 먼저 set자료구조 sort를 만들고, arr배열의 값을 insert해서 정렬했다. set자료구조 sort에서 현재 값이랑 prev 값을 빼고, 두 수의 차를 map의 key로 사용해서 동일한 차를 갖는 값들을 같은 key의 배열로 넣어줬다. map자료구조는 key를 기준으로 오름차순 정렬되므로 diffMap. begin()에서 배열을 반환했다. [채점 결과]
[HackerRank] Find the Median
2021. 10. 8. 09:29
알고리즘
# Find the Median (Sorting) [문제] [코드] void quickSort(vector* arr, int start, int end){ int pivot = (*arr)[start], temp; int left = start+1, right = end; if(left < right) { while(left
[HackerRank] Diagonal Difference
2021. 10. 8. 08:29
알고리즘
# Diagonal Difference (Warmup) [문제] [코드] int diagonalDifference(vector arr) { int sub; int left = 0, right = 0; int n = arr.size(); for(int i = 0; i < n; i++) { left += arr[i][i]; right += arr[i][n-1-i]; } sub = left - right; return (sub < 0) ? (sub ^ 0xFFFFFFFF) + 1 : sub; } [코드설명] matrix의 양쪽 대각선 합을 구하고 그 차의 절댓값을 구하는 문제다. 왼쪽 대각선은 행과 열의 인덱스가 같고, 오른쪽 대각선은 행의 인덱스는 0부터 열의 인덱스는 n-1(n은 각각 행과 열의 크기)부터..
[HackerRank] A Very Big Sum
2021. 9. 29. 16:11
알고리즘
# A Very Big Sum (Warmup) [문제] [코드] long aVeryBigSum(vector ar) { long sum = 0; for(int i = 0; i < ar.size(); i++) sum+=ar[i]; return sum; } [코드설명] 배열의 각 요소를 더하는 문제다. 단, 각 요소의 크기가 이전보다 훨씬 커졌다. 이번 문제는 자료형에 주의해야 한다. 지난 문제처럼 int형을 사용할 경우 sum이 int의 범위를 넘어서므로 error가 발생한다. 따라서 int 대신 long int형을 사용해줬다. [채점 결과]
[HackerRank] Counting Sort 2
2021. 9. 29. 15:40
알고리즘
# Counting Sort 2 (Sorting) [문제] [코드] vector countingSort(vector arr) { vector counting(100); vector result; for(int i = 0; i < arr.size(); i++) counting[arr[i]]+=1; for(int i = 0; i < 100; i++) { for(int j = 0; j < counting[i]; j++) result.push_back(i); } return result; } [코드설명] Counting sort를 사용하는 문제다. arr배열에 있는 정수 i를 카운팅하여 새로운 배열 counting을 만들었다. 이때 같은 정수를 갖는 인덱스에 1을 더하는 방식으로 생성한다. counting배열 ..
[HackerRank] Compare the Triplets
2021. 9. 25. 02:06
알고리즘
# Compare the Triplets (Warmup) [문제] [코드] vector compareTriplets(vector a, vector b) { vector result(2, 0); for(int i = 0; i b[i]) result[0]+=1; else if(a[i] < b[i]) result[1]+=1; } return result; } [코드설명] Alice와 Bob의 point를 비교해서 score를 매기는 문제다. 비교해야 할 point는 총 3개이므로 for문으로 i를 0부터 2까지 증가시켜 3번 반복했다. 이때 i를 a 벡터와 b 벡터의 index로 활용했다. a[i]와 b[i]를 비교해서 a가 더 클 경우 result[0], b가 더 클 ..