코딩 스터디

[241119] C++ 스터디 4주차

jisu0924 2024. 11. 20. 02:15

문제 1. 각도기

문제 설명
각에서 0도 초과 90도 미만은 예각, 90도는 직각, 90도 초과 180도 미만은 둔각 180도는 평각으로 분류합니다. 각 angle이 매개변수로 주어질 때 예각일 때 1, 직각일 때 2, 둔각일 때 3, 평각일 때 4를 return하도록 solution 함수를 완성해주세요.
예각 : 0 < angle < 90
직각 : angle = 90
둔각 : 90 < angle < 180
평각 : angle = 180

 

#include <string>
#include <vector>

using namespace std;

int solution(int angle) {
    if(angle==90)
        return 2;
    if(angle==180)
        return 4;
    if(angle<90)
        return 1;
    if(angle<180)
        return 3;
}

문제 그대로 예각, 직각, 둔각, 평각일 때의 상황에 맞춰 리턴하면 되지만 <180에는 90이 포함되기 때문에 만약

    if(angle<180)
        return 3;

을 먼저 쓰게 된다면 각도가 90도여도 3을 리턴할 것이다. 따라서 

    if(angle==90)
        return 2;
    if(angle==180)
        return 4;

를 먼저 써준 후 예각과 둔각을 마저 작성해 준다.


문제 2. 짝수의 합

문제 설명
정수 n이 주어질 때, n이하의 짝수를 모두 더한 값을 return 하도록 solution 함수를 작성해주세요.
#include <string>
#include <vector>

using namespace std;

int solution(int n) {
    int sum = 0;
    for(int i=0;i<=n;i+=2)
            sum +=i;
    return sum;
}

이 문제는 홀수는 더하지 않고 짝수만 더해야 하기 때문에 i가 2씩 증가되어야 한다. for문의 값을 sum에 저장 후 return해 주면 된다.


문제 3. 배열의 평균값

문제 설명
정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소의 평균값을 return하도록 solution 함수를 완성해주세요.
#include <string>
#include <vector>

using namespace std;

double solution(vector<int> numbers) {
    double sum=0;
    for(int i=0;i<numbers.size();i++){
        sum += numbers[i];
    }
    return sum/numbers.size();
}

sum을 double형으로 선언해 주어야 result의 값이 소수점을 포함하여 나올 수 있다. 배열의 길이를 구하는 size()를 사용하여 길이만큼 배열의 각 원소를 sum에 저장 후 sum을 길이만큼 나눈 값을 리턴한다.


문제 4. 문자열 뒤집기

문제 설명
문자열 my_string이 매개변수로 주어집니다. my_string을 거꾸로 뒤집은 문자열을 return하도록 solution 함수를 완성해주세요.
#include <string>
#include <vector>

using namespace std;

string solution(string my_string) {
    string n = "";
    for(int i = my_string.length()-1;i>=0;i--){
        n += my_string[i];
        }
    return n;
}

우선 시작점은 my_string 길이의 -1에서 시작을 해 주어야 하는데 그 이유는 배열의 첫 번째 인덱스가 0부터 시작하기 때문에 길이가 n이라면 마지막 인덱스는 n-1이기 때문이다. 이후 i가 0보다 작거나 같아졌을 떄, 즉 인덱스가 0까지 올 때까지 i를 뺴 준 후 그 값을 n에다 저장해 리턴해 준다.


문제 5. 배열 뒤집기

문제 설명
정수가 들어 있는 배열 num_list가 매개변수로 주어집니다. num_list의 원소의 순서를 거꾸로 뒤집은 배열을 return하도록 solution 함수를 완성해주세요.
#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> num_list) {
    int n = num_list.size();
    for(int i=0;i<n/2;i++)
        swap(num_list[i],num_list[n-i-1]);
    return num_list;
}

string 클래스의 멤버 함수 중 하나인 swap을 이용하면 간단하게 풀 수 있다. swap(a,b)는 a와 b의 위치를 바꾸는 함수이므로, 우선 num_list 배열의 길이를 구해 준 후 그 길이의 절반만큼 for문을 돌린다. 그 이유는 배열을 가운데로 나누고 앞/뒤로 위치를 바꿔주는 것이기 때문이다. for문에서는 swap을 이용해 인덱스 i번과 인덱스 num_list의 길이 - i -1(길이-1을 해야 인덱스)를 바꿔치기 해 준다. 이후 바꿔치기된 num_list의 값을 리턴해 준다. 

'코딩 스터디' 카테고리의 다른 글

[250128] C 스터디 2주차  (0) 2025.01.29
[241125] C++ 스터디 5주차  (0) 2024.11.25
[241112] C++ 스터디 3주차  (1) 2024.11.12
[241104] C++ 스터디 2주차  (0) 2024.11.04
[241006] C++ 스터디 1주차  (10) 2024.10.08