프로그래머스 - 숫자의 표현

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이 방법

1. sum이 n보다 커질 때까지 num부터 시작해서 num++한 값을 계속 sum에 더한다.

2. sum == num이면 answer++ 해준다.

3. 이를 i부터 n까지 반복

4. answer 리턴

#include <string>
#include <vector>

using namespace std;

int solution(int n) {
    int answer = 0;
    
    for(int i = 1; i <= n; i++) {
        int num = i;
        int sum = 0;
        while(sum <= n){
            sum += num;
            
            if (sum == n) answer++;
            
            num++;
        }
    }
    
    return answer;
}

'프로그래머스 > 2레벨' 카테고리의 다른 글

피보나치 수/C++  (0) 2023.01.06
올바른 괄호/C++  (0) 2023.01.05
이진 변환 반복하기/C++  (0) 2023.01.05
행렬의 곱셈/C++  (0) 2023.01.04
최댓값과 최솟값/C++  (0) 2023.01.04

프로그래머스 - 이진 변환 반복하기

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이 방법

1. int형 count, countZero와 문자열 temp를 선언합니다.

2. 문자열 s의 i번째 문자가 0이면 countZero++을 하고 1이면 temp += "1"을 해줍니다.

3. 추가로 선언한 num에 temp.length()를 대입하고 문자열 s를 비워줍니다.

4. num이 0이 아닐 때까지 이진 변환을 반복합니다.

5. count++을 해주고 이를 s가 "1"이 될때까지 반복합니다.

6. 반복문이 끝나면 count와 countZero를 answer에 담고 리턴

#include <string>
#include <vector>

using namespace std;

vector<int> solution(string s) {
    vector<int> answer;
    
    int count = 0;
    int countZero = 0;
    
    
    while(s != "1") {
        string temp = "";
        for(int i = 0; i < s.length(); i++){
            if(s[i] == '0')
                countZero++;
            else 
                temp += '1';
        }
        
        int num = temp.length();
        
        s = "";
        while(num > 0){
            if(num % 2) s = "1" + s;
            else s = "0" + s;
            
            num /= 2;
        }
        
        count++;
    }
    
    answer.push_back(count);
    answer.push_back(countZero);
    
    return answer;
}

'프로그래머스 > 2레벨' 카테고리의 다른 글

올바른 괄호/C++  (0) 2023.01.05
숫자의 표현/C++  (0) 2023.01.05
행렬의 곱셈/C++  (0) 2023.01.04
최댓값과 최솟값/C++  (0) 2023.01.04
JadenCase 문자열 만들기/C++  (0) 2023.01.04

문제 설명

2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.

제한 조건
  • 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
  • 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
  • 곱할 수 있는 배열만 주어집니다.

풀이 방법

처음 풀이할 때 nums에 담는 것이 아니라 answer[i].push_back()을 시도했으나 aborted(core dumped)가 떠서 1차원 벡터에 담은 후 answer에 담아주도록 했다.

 

1. 3차원 배열을 작성한다.

2. sum에 arr1[i][k]와 arr2[k][j]를 곱한 값을 arr1[0].size()번 더한다.

3. 이후 sum값을 1차원 벡터 nums에 담는 것을 arr2[0].size()번 반복한다.

4. 해당 nums를 answer에 담는 것을 arr1.size()번 반복한다.

5. 이후 answer 리턴

#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> nums;
        for(int j = 0; j < arr2[0].size(); j++){
            int sum = 0;
            for(int k = 0; k < arr1[0].size(); k++){
                sum += arr1[i][k]*arr2[k][j];
            }
            nums.push_back(sum);
        }  
        answer.push_back(nums);
    }

    return answer;
}

 

'프로그래머스 > 2레벨' 카테고리의 다른 글

올바른 괄호/C++  (0) 2023.01.05
숫자의 표현/C++  (0) 2023.01.05
이진 변환 반복하기/C++  (0) 2023.01.05
최댓값과 최솟값/C++  (0) 2023.01.04
JadenCase 문자열 만들기/C++  (0) 2023.01.04

문제 설명

문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다. str에 나타나는 숫자 중 최소값과 최대값을 찾아 이를 "(최소값) (최대값)"형태의 문자열을 반환하는 함수, solution을 완성하세요.
예를들어 s가 "1 2 3 4"라면 "1 4"를 리턴하고, "-1 -2 -3 -4"라면 "-4 -1"을 리턴하면 됩니다.

제한 조건
  • s에는 둘 이상의 정수가 공백으로 구분되어 있습니다.

풀이 방법

1. min과 max를 문자열 s 안에 있는 첫 번째 숫자로 초기화시킨다.

2. 문자열에 담긴 마지막 숫자를 temp에 담아 비교하기 위해 아래 if문의 조건에 부합하도록 s에 공백을 더해준다.

3. 이후 s[i]가 공백이 아닐 때까지 temp에 담고 공백이라면 min, max와 비교한다.

4. min과 max를 "최솟값 최댓값" 형태의 문자열로 리턴

#include <string>
#include <vector>

using namespace std;

string solution(string s) {
    int min = stoi(s.substr(0,s.find(' ')));
    int max = stoi(s.substr(0,s.find(' ')));
    
    string temp = "";
    s += " ";
    for(int i = 0; i < s.length(); i++){
        if(s[i] != ' ')
            temp += s[i];
        else {
            if(min >= stoi(temp))
                min = stoi(temp);
            if(max <= stoi(temp))
                max = stoi(temp);
            temp.clear();
        }
    }
    
    return to_string(min) + " " + to_string(max);
}

 

'프로그래머스 > 2레벨' 카테고리의 다른 글

올바른 괄호/C++  (0) 2023.01.05
숫자의 표현/C++  (0) 2023.01.05
이진 변환 반복하기/C++  (0) 2023.01.05
행렬의 곱셈/C++  (0) 2023.01.04
JadenCase 문자열 만들기/C++  (0) 2023.01.04

문제 설명

JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고)
문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.

제한 조건
  • s는 길이 1 이상 200 이하인 문자열입니다.
  • s는 알파벳과 숫자, 공백문자(" ")로 이루어져 있습니다.
    • 숫자는 단어의 첫 문자로만 나옵니다.
    • 숫자로만 이루어진 단어는 없습니다.
    • 공백문자가 연속해서 나올 수 있습니다.

풀이 방법

-  toupper나 tolower를 쓰면 각각 소문자, 대문자일 때 대문자, 소문자로 변환시켜 준다.

1. 문자열 s의 첫 번째 문자를 toupper 해준다. 

2. 이후 반복문을 돌며 s[i] 앞에 공백이 있을 시 toupper, 그 이외에는 tolower를 해준다.

3. 반복문이 끝난 후 문자열 s 리턴

#include <string>
#include <vector>

using namespace std;

string solution(string s) {
    s[0] = toupper(s[0]);
    for(int i = 1; i < s.length(); i++){
        if(s[i - 1] == ' ') s[i] = toupper(s[i]);
        else s[i] = tolower(s[i]);
    }
    
    return s;
}

 

'프로그래머스 > 2레벨' 카테고리의 다른 글

올바른 괄호/C++  (0) 2023.01.05
숫자의 표현/C++  (0) 2023.01.05
이진 변환 반복하기/C++  (0) 2023.01.05
행렬의 곱셈/C++  (0) 2023.01.04
최댓값과 최솟값/C++  (0) 2023.01.04

+ Recent posts