문제 설명

문자열 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

문제 설명

문자열 s가 주어졌을 때, s의 각 위치마다 자신보다 앞에 나왔으면서, 자신과 가장 가까운 곳에 있는 같은 글자가 어디 있는지 알고 싶습니다.
예를 들어, s="banana"라고 할 때,  각 글자들을 왼쪽부터 오른쪽으로 읽어 나가면서 다음과 같이 진행할 수 있습니다.

  • b는 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.
  • a는 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.
  • n은 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.
  • a는 자신보다 두 칸 앞에 a가 있습니다. 이는 2로 표현합니다.
  • n도 자신보다 두 칸 앞에 n이 있습니다. 이는 2로 표현합니다.
  • a는 자신보다 두 칸, 네 칸 앞에 a가 있습니다. 이 중 가까운 것은 두 칸 앞이고, 이는 2로 표현합니다.

따라서 최종 결과물은 [-1, -1, -1, 2, 2, 2]가 됩니다.

문자열 s이 주어질 때, 위와 같이 정의된 연산을 수행하는 함수 solution을 완성해주세요.


제한사항
  • 1 ≤ s의 길이 ≤ 10,000
    • s은 영어 소문자로만 이루어져 있습니다.

풀이 방법

1. map 자료형 m을 선언한다.

2. 처음 나온 문자일 시 answer에 -1을 담고 m에 문자와 해당 문자의 인덱스를 담는다.

3. 처음 나온 문자가 아닐 시 answer에 현재 문자의 인덱스에 m에 저장된 같은 문자를 key로 가지는 value를 뺀 값을 담는다.

4. m에서 해당 key값의 value를 현재 문자의 인덱스로 수정한다.

5. answer 리턴

#include <string>
#include <vector>
#include <map>

using namespace std;

vector<int> solution(string s) {
    vector<int> answer;
    
    map<char,int> m;
    
    for(int i = 0; i < s.length(); i++){
        if(m.count(s[i]) == 0) {
            m.insert(pair<char,int> (s[i], i));
            answer.push_back(-1);
        }
        else{
            answer.push_back(i - m[s[i]]);
            m[s[i]] = i;
        }
    }
    
    return answer;
}

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

숫자 짝꿍/C++  (1) 2023.01.03
푸드 파이트 대회/C++  (0) 2023.01.03
명예의 전당 (1)/C++  (0) 2023.01.03
완주하지 못한 선수/C++  (0) 2022.12.31
폰켓몬/C++  (0) 2022.12.31

문제 설명

과일 장수가 사과 상자를 포장하고 있습니다. 사과는 상태에 따라 1점부터 k점까지의 점수로 분류하며, k점이 최상품의 사과이고 1점이 최하품의 사과입니다. 사과 한 상자의 가격은 다음과 같이 결정됩니다.

  • 한 상자에 사과를 m개씩 담아 포장합니다.
  • 상자에 담긴 사과 중 가장 낮은 점수가 p (1 ≤ p ≤ k)점인 경우, 사과 한 상자의 가격은 p * m 입니다.

과일 장수가 가능한 많은 사과를 팔았을 때, 얻을 수 있는 최대 이익을 계산하고자 합니다.(사과는 상자 단위로만 판매하며, 남는 사과는 버립니다)

예를 들어, k = 3, m = 4, 사과 7개의 점수가 [1, 2, 3, 1, 2, 3, 1]이라면, 다음과 같이 [2, 3, 2, 3]으로 구성된 사과 상자 1개를 만들어 판매하여 최대 이익을 얻을 수 있습니다.

  • (최저 사과 점수) x (한 상자에 담긴 사과 개수) x (상자의 개수) = 2 x 4 x 1 = 8

사과의 최대 점수 k, 한 상자에 들어가는 사과의 수 m, 사과들의 점수 score가 주어졌을 때, 과일 장수가 얻을 수 있는 최대 이익을 return하는 solution 함수를 완성해주세요.

제한사항
  • 3 ≤ k ≤ 9
  • 3 ≤ m ≤ 10
  • 7 ≤ score의 길이 ≤ 1,000,000
    • 1 ≤ score[i] ≤ k
  • 이익이 발생하지 않는 경우에는 0을 return 해주세요.

풀이 방법

1. score 배열을 오름차순으로 정렬한다.

2. box만큼 answer에 m에 각 상자의 첫번째 인덱스의 원소 값을 곱한 값, 즉 m * score[score.size() - m * count]를 더한다.

3. box가 0이되면 반복문을 끝내고 answer 리턴

 

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

using namespace std;

int solution(int k, int m, vector<int> score) {
    int answer = 0;
    int count = 1;
    int box = score.size() / m;
    
    sort(score.begin(), score.end());
    
    while(box > 0){
        answer += m * (score[score.size() - m*count]);
        box--;
        count++;
    }
    
    return answer;
}

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

로또의 최고 순위와 최저 순위/C++  (0) 2022.12.30
[1차] 비밀지도/C++  (0) 2022.12.29
내적  (0) 2022.12.29
예산  (0) 2022.12.29
하샤드 수  (0) 2022.12.29

+ Recent posts