목록알고리즘 (547)
N
우선 tmp 변수를 선언하여 x를 대입한다. tmp는 계속해서 똑같은 값(x)을 더해줄 때 사용한다. 왜냐하면 for문에서 x의 값을 넣었을 때, x += x를 하면 x = 2일 때, x = 2, 4, 8, 16... 이 되기 때문이다..! 그래서 변하지 않는 tmp를 이용하여 x에 더해준다..! #include #include using namespace std; vector solution(int x, int n) { vector answer; int tmp = x; for(int i = 0; i < n; i++) { answer.push_back(x); x += tmp; } return answer; }
행렬의 덧셈을 구현하는 문제..! arr1과 arr2의 size는 같으니까 아무거나 사용해도 상관없다..! 첫 번째 for문에서 int형 벡터 tmp와 int형 변수 sum을 선언해준다. sum은 행렬의 덧셈을 저장해주는 변수이고, tmp는 각 행의 덧셈을 넣어주는 변수이다. 이중 for문을 사용하여 ( [0, 0] + [0, 0] ) ( [0, 1] + [0, 1] ) ( [1, 0] + [1, 0] ) ( [1, 1] + [1, 1] ) 이렇게 계산을 한다. 문제의 첫 번째 예시를 통해 tmp에 대해 자세하게 설명하자면 i = 0, j = 0 일 때, sum = 4 -> tmp에 4 저장. i = 0, j = 1 일 때, sum = 6 -> tmp에 6 저장. 이렇게 두번 돌게 되면 tmp에는 (4,..
for문만 사용할 줄 알면 풀 수 있는 문제..! for문을 돌면서 answer에 arr에 있는 수를 모두 더한 후, 마지막에 arr.size()만큼 나눠주면 끄으으읕..! #include #include using namespace std; double solution(vector arr) { double answer = 0; for(int i = 0; i < arr.size(); i++) answer += arr[i]; answer /= arr.size(); return answer; }
입력으로 들어온 num을 1이 될 때까지 반복하여 문제를 푸는 문제이다..! 그런데 long long tmp = num을 한 이유는..? 바로 오버플로우 때문이다. int num을 이용하여 while문을 돌게 되면 3번째 예시로 들어온 626331의 답이 488로 나오게 된다. 이는 오버플로우로 인해 값이 손실되었기 때문이다..! 그래서 long long 형 변수를 선언하여 문제를 풀어야 한다..! #include #include using namespace std; int solution(int num) { int answer = 0; long long tmp = num; while(tmp != 1) { if(answer > 500) return -1; if(tmp % 2 == 0) tmp /= 2; ..
int형 변수 n과 m의 최대 공약수와 최소 공배수를 각각 answer에 넣어주면 된다..! 최대 공약수를 구하는 gcd() 함수와 최소 공배수를 구하는 lcm() 함수를 정의하여 사용한다. 이때, lcm() 함수에서는 gcd() 함수를 사용한다..! N과 M의 최대 공약수를 G, 최소 공배수를 L이라 하고, N과 M을 G로 나누었을 때의 몫을 각각 n, m으로 하자. G )N M a b 이랬을 때, 최소 공배수 L은 L = G * n * m, N * M = L * G 의 관계가 나오게 된다. (L = N * M / G) 그러므로 lcm() 함수는 a * b / gcd(a, b)의 결괏값을 리턴한다...! answer에 각각의 함수의 결과값을 넣어주면 끄으으읏..! #include #include usi..
이 문제는 c언어를 공부했다면 아아아아아주 쉽게 풀 수 있는 문제..! if문을 해도 되지만, 한 줄로 작성하기 위해 삼항 연산자를 사용했다. num % 2로 나머지가 1이냐 0이냐에 따라 answer에 "Odd" 또는 "Even"을 저장한다. #include #include using namespace std; string solution(int num) { string answer = ""; answer = num % 2 ? "Odd" : "Even"; return answer; }
arr 배열에서 가장 작은 수를 찾아서 제거한 후 그대로 리턴해주면 된다..! 우선 arr의 size가 1이면 answer에 -1을 넣어 그대로 리턴해준다..! (size가 1인 경우 가장 작은 수를 제거한 후 빈 배열이 되기 때문에..) size가 1이 아니면 erase함수를 이용하여 가장 작은 수를 찾아 제거한다. erase함수는 vector에서 사용하는 함수로, 해당 반복자(iterator)를 제거해주는 함수이다..! 본인은 min_element 함수를 사용하여 arr 배열서 가장 작은 수의 iterator를 받아와 제거하였다. ->min_element(arr.begin(), arr.end() = arr.begin()에서 arr.end()까지 가장 작은 수의 위치(반복자) 리턴..! 다른 예로는 m..
long long 형의 n의 제곱근을 tmp 변수에 저장을 해주자..! 제곱근을 구해주는 함수인 sqrt()를 활용하였다. cmath 헤더에 존재하니 include를 해주고, tmp에 sqrt(n)을 하여 제곱근을 저장한다. 그리고 n이 양의 정수 tmp의 제곱인지 판별해주도록 하자..! pow(tmp, 2)는 tmp를 2승 하여 값을 리턴해준다. pow() 함수도 종종 쓰이는 것 같다..! pow(tmp, 2)와 n이 같으면 tmp는 n의 양의 제곱근이 되고, 일치하지 않으면 tmp는 n의 제곱근이 아니므로 -1을 리턴해준다..! #include #include #include #include using namespace std; long long solution(long long n) { long l..