Level1 - -

 

 문제

문제 설명

행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.

제한 조건
  • 행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다.
입출력 예
arr1 arr2 return
[[1,2],[2,3]] [[3,4],[5,6]] [[4,6],[7,9]]
[[1],[2]] [[3],[4]] [[4],[6]]

 

 풀이

사용언어 : C++

 

#include <string>
#include <vector>

using namespace std;

vector<vector<int>> solution(vector<vector<int>> arr1, vector<vector<int>> arr2) {
    vector<vector<int>> answer;
    
    for ( int i = 0 ; i < arr1.size(); ++i ){
        vector<int> vec;
        
        for ( int j = 0 ; j < arr1[i].size(); ++j ){
            
            vec.push_back(arr1[i][j] + arr2[i][j]);

        }   
        
        answer.push_back(vec);
    }
    
    
    return answer;
}

출처 : https://school.programmers.co.kr/learn/courses/30/lessons/12950

Level1

 

 문제

문제 설명

이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다.
별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요.


제한 조건
  • n과 m은 각각 1000 이하인 자연수입니다.

예시

입력

5 3

출력

*****
*****
*****

 

 풀이

사용언어 : C++

학교다닐때 수업시간 퀴즈가 생각나는 문제.

#include <iostream>

using namespace std;

int main(void) {
    int a;
    int b;
    cin >> a >> b;
    
    for ( int i = 0 ; i <b; ++i){
        
     for ( int j = 0 ; j <a; ++j){
        
        cout <<"*";    
        
        
     }   
        cout << endl;    
        
        
    }
    
    return 0;
}

출처 : https://school.programmers.co.kr/learn/courses/30/lessons/12969

Level1 

 

 문제

문제 설명

두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.


제한사항
  • 1 ≤ left  right ≤ 1,000

 

입출력 예
left right result
13 17 43
24 27 52

입출력 예 설명

입출력 예 #1

  • 다음 표는 13부터 17까지의 수들의 약수를 모두 나타낸 것입니다.

약수 약수의 개수
13 1, 13 2
14 1, 2, 7, 14 4
15 1, 3, 5, 15 4
16 1, 2, 4, 8, 16 5
17 1, 17 2
  • 따라서, 13 + 14 + 15 - 16 + 17 = 43을 return 해야 합니다.

입출력 예 #2

  • 다음 표는 24부터 27까지의 수들의 약수를 모두 나타낸 것입니다.
수약수약수의 개수
24 1, 2, 3, 4, 6, 8, 12, 24 8
25 1, 5, 25 3
26 1, 2, 13, 26 4
27 1, 3, 9, 27 4
  • 따라서, 24 - 25 + 26 + 27 = 52를 return 해야 합니다.

 

 풀이

사용언어 :  C++

#include <string>
#include <vector>
#include <iostream>

using namespace std;

int solution(int left, int right) {
    int answer = 0;
    int cnt = 0;
    
    for ( int j = left; j <= right; ++ j){
        int cnt = 0;
        for ( int i = 1; i <= j; ++ i ){

            if ( j % i == 0 ){
                ++cnt;
            }
        }
        
        if ( cnt % 2 == 0 ){
            
            answer += j;
        }
        else {
            answer -= j;
        }
        
    }
    
    
    
    
    
    return answer;
}

출처 : https://school.programmers.co.kr/learn/courses/30/lessons/77884

Level1 - -

 

 문제

문제 설명

문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.
s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.

제한 사항
  • str은 길이 1 이상인 문자열입니다.
입출력 예
s return
"Zbcdefg" "gfedcbZ"

 

 풀이

사용언어 : C++

 

string형과 char형에 대해서 다시 찾아보고 공부가 필요함을 느꼈다.

최근 개발에서 JS만 사용해서 자료형이나 형변환을 신경을 쓰지 않고 개발을 해서 잊고 개발하던 부분을

다시 문제를 통해서 찾아보는 기회가 되었다.

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

bool compare ( char a, char b );
string solution(string s) {
    string answer = "";
    vector<char> vecStrSmall;
    vector<char> vecStrLarge;
    
    for ( int i = 0; i < s.size(); ++i ){
        
        if ( 'a' <= s[i]){
            vecStrSmall.push_back(s[i]);
        }
        else{
            vecStrLarge.push_back(s[i]);
        }        
    }
    
    sort(vecStrSmall.begin(), vecStrSmall.end(), compare);
    sort(vecStrLarge.begin(), vecStrLarge.end(),compare);
    
    for(int i = 0 ; i < vecStrSmall.size(); ++i ){
        answer.push_back(vecStrSmall[i]);
    }
    for(int i = 0 ; i < vecStrLarge.size(); ++i ){
         answer.push_back(vecStrLarge[i]);
    }
    
    
    return answer;
}

bool compare ( char a, char b ){
    return a>b;
}

 

다른사람의 풀이

#include <string>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;

string solution(string s) {
    sort (s.begin(), s.end(), greater<char>());
    return s;
}


#include <string>
#include <vector>
#include <algorithm>
using namespace std;

string solution(string s) {
    string answer = "";
    sort(s.rbegin(),s.rend());

    return s;
}

 

 

출처 : https://school.programmers.co.kr/learn/courses/30/lessons/12917

Level1

 

 문제

문제 설명

문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.

제한 사항
  • s는 길이 1 이상, 길이 8 이하인 문자열입니다.
  • s는 영문 알파벳 대소문자 또는 0부터 9까지 숫자로 이루어져 있습니다.
입출력 예
s return
"a234" false
"1234" true

 

 풀이

사용언어 : C++

 

문제에서 제시하는 4또는 6이라는 걸 잘확인하고 풀이에 접근하자.

#include <string>
#include <vector>
#include <iostream>

using namespace std;

bool solution(string s) {
    bool answer = true;
    
    if ( s.size() != 4 && s.size() != 6 ){
        return false;   
    }
    
    
    for( int i = 0 ; i < s.size(); ++i){
        
        if ( s[i] > '9' ){
            cout<<s[i];
            return false;
        }
        
    }
    
    return answer;
}

 

 

출처 : https://school.programmers.co.kr/learn/courses/30/lessons/12918

Level1

 

 문제

문제 설명

길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요.

이때, a와 b의 내적은 a[0]*b[0] + a[1]*b[1] + ... + a[n-1]*b[n-1] 입니다. (n은 a, b의 길이)


제한사항
  • a, b의 길이는 1 이상 1,000 이하입니다.
  • a, b의 모든 수는 -1,000 이상 1,000 이하입니다.

 

입출력 예
a b result
[1,2,3,4] [-3,-1,0,2] 3
[-1,0,1] [1,0,-1] -2

입출력 예 설명

입출력 예 #1

  • a와 b의 내적은 1*(-3) + 2*(-1) + 3*0 + 4*2 = 3 입니다.

입출력 예 #2

  • a와 b의 내적은 (-1)*1 + 0*0 + 1*(-1) = -2 입니다.

 

 풀이

사용언어 : C++

#include <string>
#include <vector>

using namespace std;

int solution(vector<int> a, vector<int> b) {
    int answer = 0;
    
    for ( int i = 0 ; i < a.size(); ++i ){
    
        answer += a[i] * b[i];
        
    }
    
    return answer;
}

출처 : https://school.programmers.co.kr/learn/courses/30/lessons/70128

Level1 - -

 

 문제

문제 설명

0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.


제한사항
  • 1 ≤ numbers의 길이 ≤ 9
    • 0 ≤ numbers의 모든 원소 ≤ 9
    • numbers의 모든 원소는 서로 다릅니다.

 

입출력 예
number result
[1,2,3,4,6,7,8,0] 14
[5,8,4,0,6,7,9] 6

입출력 예 설명

입출력 예 #1

  • 5, 9가 numbers에 없으므로, 5 + 9 = 14를 return 해야 합니다.

입출력 예 #2

  • 1, 2, 3이 numbers에 없으므로, 1 + 2 + 3 = 6을 return 해야 합니다.

 

 풀이

사용언어 : C++

#include <string>
#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

int solution(vector<int> numbers) {
    int answer = 0;
    vector<int> vecTemp;
    
    for ( int i = 0 ; i <= 9; ++i ){
        vecTemp.push_back(i);
    }
    
    sort(numbers.begin(), numbers.end());
        
    for ( int i = 0 ; i <= numbers.size(); ++i ){
        
     for ( int j = 0 ; j <= vecTemp.size(); ++j ){
        if ( numbers[i] == vecTemp[j] ){
            vecTemp[j] = -1;
            break;
        }
     }
    }
    
    for ( int i = 0 ; i <= 9; ++i ){   
        if ( vecTemp[i] != -1 ){
            answer += vecTemp[i];
        } 
    }
    return answer;
}

 

 

다른사람 풀이

문제는 빠진 수에 모든 더한 수를 물었으므로 모든 값을 더 한 값에서 없는 값을 빼주면 되는 방법의 접근이 좋았다.

#include <string>
#include <vector>

using namespace std;

int solution(vector<int> numbers) {

    int answer = 45;

    for (int i = 0 ; i < numbers.size() ; i++)
        answer -= numbers[i];

    return answer;
}

 

 

 

출처 : https://school.programmers.co.kr/learn/courses/30/lessons/86051

Level1 - -

 

 문제

문제 설명

단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.

재한사항
  • s는 길이가 1 이상, 100이하인 스트링입니다.
입출력 예
s return
"abcde" "c"
"qwer" "we"

 

 풀이

사용언어 : c++

#include <string>
#include <vector>

using namespace std;

string solution(string s) {
    string answer;
 
    int index = 0;
    if ( s.size() % 2 == 0 ){
        index = s.size()/2;
        string a,b;
        a = s[index-1];
        b = s[index];
        answer = a + b;
    }
    else {
        index = s.size()/2;
        answer = s[index];
    }
    
    
    return answer;
}

 

// 다른 사람 풀이

#include <string>
#include <vector>

using namespace std;

string solution(string s) {
    string answer;
 
    int index = 0;
    if ( s.size() % 2 == 0 ){
        index = s.size()/2;
        string a,b;
        a = s[index-1];
        b = s[index];
        answer = a + b;
    }
    else {
        index = s.size()/2;
        answer = s[index];
    }
    
    
    return answer;
}
```

 

 

출처 : https://school.programmers.co.kr/learn/courses/30/lessons/12903

+ Recent posts