[문제] A Very Big Sum | HackerRank Calculate the sum of the values in an array that might exceed the range of int values. www.hackerrank.com [문제 설명] - 매우 큰 수의 합을 리턴하는 함수를 만들어라 > return type은 long type임 [문제 풀이] - c++에서 입력받는 파라미터가 vector뿐이여서 수의 개수를 구하는 것이 문제 → vector이름.size()를 통해 벡터에 저장된 수들의 개수를 얻을 수 있음 - for문을 반복하며 long 타입의 변수에 값을 더해나감 [코드] long aVeryBigSum(vector ar) { long a=0; for(int i=0;i
[문제] Closest Numbers | HackerRank Find the closest numbers in a list. www.hackerrank.com [문제 설명] - 가장 작은 차이를 가지는 두 수의 조합을 담는 벡터를 반환하는 함수를 만들자 [문제 풀이] - 벡터에 있는 수를 오름차순으로 정렬 - for문을 돌면서 두 값의 차이를 구함 > 두 값의 차이가 min과 같다면 새로 만든 벡터에 두 원소를 push > 두 값의 차이가 min보다 작다면 새로 만든 벡터에서 모든 원소를 pop 하고 새로운 두 원소를 push > 두 값의 차이가 min보다 크다면 그냥 넘어감 [코드] vector closestNumbers(vector arr) { sort(arr.begin(),arr.end()); ve..
[문제] Compare the Triplets | HackerRank Compare the elements in two triplets. www.hackerrank.com [문제 설명] - alice와 bob의 세개의 숫자를 비교하여 각 사람의 점수를 더함 - 각 배열의 자리에 더 큰 수를 낸 사람이 이기며 동점일 땐 아무도 점수를 받지 않음 [문제 풀이] - for문을 통해 a vector와 b vector의 각 자리를 비교 > a가 더 크다면 alice의 점수를 증가 > b가 더 크다면 bob의 점수를 증가 > 동점일 경우에는 아무것도 하지 않고 넘어감 - int형 vector를 생성하여 0번째 인덱스에는 alice의 점수를, 1번째 인덱스에는 bob의 점수를 저장 [코드] vector compare..
[문제] Plus Minus | HackerRank Calculate the fraction of positive, negative and zero values in an array. www.hackerrank.com [문제 설명] - 양의 값의 비율, 음의 값의 비율, 0의 비율을 구해야 함 - 소숫점 아래 6자리까지 표현함 [문제 풀이] - 각 양수, 음수, 0의 개수를 세기 위하여 for문으로 벡터를 탐색 - 나누어지는 수가 실수형이여야 하므로 형변환을 시켜주어야 함 - 비율을 구하기 위해 각 개수/벡터의 원소의 개수 식을 세움 - 6자리까지 출력할 수 있도록 출력 포맷 형식 지정 [코드] void plusMinus(vector arr) { int plus=0; int minus=0; int zer..
[문제] Grading Students | HackerRank Round student grades according to Sam's rules. www.hackerrank.com [문제 설명] - 학생들의 최종 성적을 구하는 문제 - 38점 이하의 점수를 받는 학생들은 반올림된 점수를 받지 못함 - 학생들의 점수를 반올림 할 수 있는 경우에 대하여는 반올림한 성적을 반영함 [문제 풀이] - 일의 자리가 5인 점수와 그렇지 않은 점수를 구별해야 함 - 100점일 때와 낙제점 38점 이하일 때에 대하여 예외처리 필요 - 일의 자리가 5 아래일 경우 해당 점수의 십의자리에 해당하는 숫자*10+5와 주어진 점수의 차를 비교하여 최종 성적을 구함 - 일의 자리가 5이상일 경우 해당 점수의 십의 자리에 해당하는 ..
[문제] Equal Stacks | HackerRank Equalize the piles! www.hackerrank.com [문제 설명] - 그림을 보니 push된 반대 순서대로 pop이 되는 것을 확인할 수 있음 - 반환 값은 각각 pop하며 스택에 남은 수의 합이 같아지는 순간 그 합을 리턴함 [문제 풀이] - stack과는 다르게 아래서 깔린 수부터 pop되므로 reverse함수를 통해 순서를 변경해주어야 함 - sum 함수를 선언하여 각 벡터의 원소의 합을 각각 구함 - 세 합이 같은 수가 될때까지 각각의 합을 감소시켜 같은 수가 될 때까지 반복함 - 같은 수가 되는 순간 그 수를 반환시킴 [코드] int sum(vector a){ int sum=0; for(int i=0;im){ a-=h1.b..
[문제] 1769번: 3의 배수 문제가 잘 풀리지 않을 때, 문제를 바라보는 시각을 조금만 다르게 가지면 문제가 쉽게 풀리는 경험을 종종 해 보았을 것이다. 여러 가지 방법이 있지만 그 중 하나로 우리가 풀고 싶은 문제를 www.acmicpc.net [문제 풀이] - 한자리씩 char 배열에 저장 - 배열에 저장된 수들을 int형으로 바꿔서 더함 - 더한 값이 한자리 수가 될 때까지 위의 과정을 반복 - 더한 값이 한자리 수 중 3, 6, 9가 아니면 3의 배수가 아니므로 NO를 출력하고 조건을 만족하면 YES를 출력 [코드] #include #include #include using namespace std; void cal(char num[]); int main() { cin.sync_with_std..
[문제] 13706번: 제곱근 첫째 줄에 양의 정수 N이 주어진다. 정수 N의 제곱근은 항상 정수이며, N의 길이는 800자리를 넘지 않는다. www.acmicpc.net [문제 풀이] - 풀이 1) sqrt 라이브러리 사용 - 풀이 2) 이분탐색법 사용 > mid의 제곱이 원래 값과 같아질 때까지 반복시킴 [코드] - python: 백준 통과 코드 import math a=int(input()) print(math.isqrt(a)) - C++: 백준 통과 X --> 로직 문제인 것 같다는 결론이 많음 #include #include using namespace std; int main() { int n; cin>>n; int low = 1; int high = n; int mid; while (1) {..
[문제] 10829번: 이진수 변환 첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 100,000,000,000,000) www.acmicpc.net [문제 풀이] 풀이 1) 스택을 사용하여 2로 나눈 나머지를 저장하고 이를 pop하여 거꾸로 출력함 풀이 2) 재귀 호출을 사용하여 나머지가 0 혹은 1이면 출력하고 그렇지 않으면 재귀호출 시행 [코드] - 풀이 1 #include #include using namespace std; int main() { stack s; long a; cin>>a; do{ s.push(a%2); a/=2; }while(a!=0); do{ cout
[문제] 2941번: 크로아티아 알파벳 예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z= www.acmicpc.net [문제 풀이] - 크로아티아 알파벳의 첫 글자를 기준으로 그 다음 글자를 확인하여 변수 i를 증가시켜 자리를 이동한 후 총 개수를 셈 [코드] #include using namespace std; int main() { string str; int count = 0; cin>>str; for (int i = 0; i