목록1단계 (38)
N
핸드폰 번호의 뒷 4자리를 제외한 모든 번호를 '*'로 가리면 된다..! for문을 통해 phone_number.size()만큼 돌면서 i의 위치가 뒷 4자리가 아니면 '*'을 answer에 넣어주고, 뒷 4자리이면 번호를 그대로 넣어주면 된다..! 어렵지 않은 문제..! 문자열 길이가 20자 이하라서 for문을 돌려도 된다..! #include #include using namespace std; string solution(string phone_number) { string answer = ""; for(int i = 0; i < phone_number.size(); i++) { if(i < phone_number.size() - 4) answer.push_back('*'); else answer...
우선 각 자릿수를 구하기 위해 임시 변수 tmp와 sum을 선언한다. tmp는 x를 대입하고, tmp를 통해 자릿수를 구한다. sum은 각 자릿수를 더한 값을 저장한다. tmp가 0이면 모든 자릿수를 구하게 되므로, while문을 통해 tmp를 10으로 나눴을 때 나머지 값을 sum에 더해주고 tmp는 10으로 나눈 몫을 저장한다. while을 빠져나오고, x를 각 자릿수를 더한 sum으로 나눴을 때 나머지가 0이면 true를 반환, 아니면 false를 반환한다..! #include #include using namespace std; bool solution(int x) { int tmp = x, sum = 0; while(tmp > 0) { sum += tmp % 10; tmp /= 10; } if(..
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..