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 - -

 

 문제

문제 설명

길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다.

제한 조건
  • n은 길이 10,000이하인 자연수입니다.
입출력 예
n return
3 "수박수"
4 "수박수박"

 

 풀이

사용언어 : C++

문자열 리터럴 결합하는 경우 에러가 발생 할 수 있다는걸 이번 풀이를 하면서 알게 되었다.

문자열 결합시에는 아래 처럼 insert나 append를 이용해서 문자열을 결합

	string str1 = "abcde";
	string str2 = str1.insert(2, "A");
	//abAcde 출력
    
    str1.append(추가 할 문자열)
    str1.append(추가 할 문자열, 문자수)
    str1.append(추가 할 문자열, 위치, 문자수)
    
	string str1 = "abcde";
	string str2 = str1.append("ABC");
	//abcdeABC 출력

 

 

#include <string>
#include <vector>

using namespace std;

string solution(int n) {
    string answer = "";
    
    for (int i = 1;i <= n; ++i){
        
        if ( i % 2 == 0 ){
            answer += "박";
        }
        else {
            answer += "수";
        }
    }
    return answer;
}

 

 

다른 사람의 풀이

&연산자를 이용한 풀이가 이전에 사용했던게 기억났다.

홀수는 이진수로 항상 1로 끝나게 된다.

&연산자는 같은 숫자를 &하면 같은 숫자가 나오게 된다.

1과 1일 경우 1을

0과 0일 경우 0이 된다.

 

이번 문제에서 홀수와 짝수를 구분해야 하는 상황에서

특정수 n과 1을 &해서 n이 짝수면 끝이 0으로 끝나게 되어 true가 아니게 되고

홀수면 끝이 1이 되어 1과 1을 &연산을 하게 되어 true가 되게 하는 방식이 된다.

#include <string>
#include <vector>

using namespace std;

string solution(int n) {
    string answer = "";

    for(int i = 0; i < n; i++)
        i & 1 ? answer += "박" : answer += "수";

    return answer;
}

 

 

 

 

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

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

Level1 - -

 

 문제

문제 설명

어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.


제한사항
  • absolutes의 길이는 1 이상 1,000 이하입니다.
    • absolutes의 모든 수는 각각 1 이상 1,000 이하입니다.
  • signs의 길이는 absolutes의 길이와 같습니다.
    • signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.

 

입출력 예
absolutes signs result
[4,7,12] [true,false,true] 9
[1,2,3] [false,false,true] 0

입출력 예 설명

입출력 예 #1

  • signs가 [true,false,true] 이므로, 실제 수들의 값은 각각 4, -7, 12입니다.
  • 따라서 세 수의 합인 9를 return 해야 합니다.

입출력 예 #2

  • signs가 [false,false,true] 이므로, 실제 수들의 값은 각각 -1, -2, 3입니다.
  • 따라서 세 수의 합인 0을 return 해야 합니다.

 

 풀이

사용언어 : C++

#include <string>
#include <vector>

using namespace std;

int solution(vector<int> absolutes, vector<bool> signs) {
    int answer = 0;
    
    for (int i = 0 ; i < absolutes.size(); ++i ){
        
        if (signs[i] == false){
            absolutes[i] = -absolutes[i];
        }
        
        answer += absolutes[i];
    }
    
    
    
    return answer;
}

 

 

 

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

+ Recent posts