no image
프로그래머스/C++ 문자열을 정수로 바꾸기
문제 설명문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요.제한 조건s의 길이는 1 이상 5이하입니다.s의 맨앞에는 부호(+, -)가 올 수 있습니다.s는 부호와 숫자로만 이루어져있습니다.s는 "0"으로 시작하지 않습니다.입출력 예예를들어 str이 "1234"이면 1234를 반환하고, "-1234"이면 -1234를 반환하면 됩니다.str은 부호(+,-)와 숫자로만 구성되어 있고, 잘못된 값이 입력되는 경우는 없습니다.#include #include using namespace std;int solution(string s) { long long ans = stoll(s); return ans;}
2025.01.31
no image
프로그래머스/C++ 문자열 나누기
문제 설명문자열 s가 입력되었을 때 다음 규칙을 따라서 이 문자열을 여러 문자열로 분해하려고 합니다.먼저 첫 글자를 읽습니다. 이 글자를 x라고 합시다.이제 이 문자열을 왼쪽에서 오른쪽으로 읽어나가면서, x와 x가 아닌 다른 글자들이 나온 횟수를 각각 셉니다. 처음으로 두 횟수가 같아지는 순간 멈추고, 지금까지 읽은 문자열을 분리합니다.s에서 분리한 문자열을 빼고 남은 부분에 대해서 이 과정을 반복합니다. 남은 부분이 없다면 종료합니다.만약 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없다면, 역시 지금까지 읽은 문자열을 분리하고, 종료합니다.문자열 s가 매개변수로 주어질 때, 위 과정과 같이 문자열들로 분해하고, 분해한 문자열의 개수를 return 하는 함수 solution을 완성하세요.제한사항1 ≤..
2025.01.31
no image
프로그래머스/C++ 크기가 작은 부분문자열
문제 설명숫자로 이루어진 문자열 t와 p가 주어질 때, t에서 p와 길이가 같은 부분문자열 중에서, 이 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 return하는 함수 solution을 완성하세요.예를 들어, t="3141592"이고 p="271" 인 경우, t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다. 이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다.제한사항1 ≤ p의 길이 ≤ 18p의 길이 ≤ t의 길이 ≤ 10,000t와 p는 숫자로만 이루어진 문자열이며, 0으로 시작하지 않습니다.입출력 예t p result"3141592""271"2"500220839878""7"8"10203""15"3입..
2025.01.31
no image
프로그래머스/C++ 문자열 내 마음대로 정렬하기
문제 설명문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.제한 조건strings는 길이 1 이상, 50이하인 배열입니다.strings의 원소는 소문자 알파벳으로 이루어져 있습니다.strings의 원소는 길이 1 이상, 100이하인 문자열입니다.모든 strings의 원소의 길이는 n보다 큽니다.인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.입출력 예strings n return["sun", "bed", "car"..
2025.01.31
no image
프로그래머스/C++ K번째수
문제 설명배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다.예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.2에서 나온 배열의 3번째 숫자는 5입니다.배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요.제한사항array의 길이는 1 이상 100 이하입니다.array의 각 원..
2025.01.31
no image
프로그래머스/C++ 콜차츠 추측
문제 설명1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될 때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다.1-1. 입력된 수가 짝수라면 2로 나눕니다. 1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다. 2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다.예를 들어, 주어진 수가 6이라면 6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1 이 되어 총 8번 만에 1이 됩니다. 위 작업을 몇 번이나 반복해야 하는지 반환하는 함수, solution을 완성해 주세요. 단, 주어진 수가 1인 경우에는 0을, 작업을 500번 반복할 때까지 1이 되지 않는다면 –1을 반환해 주세요.제한 사항입력된 수, ..
2025.01.22
no image
프로그래머스/C++ [PCCE 기출문제] 8번 / 창고 정리
문제 설명 선빈이는 게임을 즐기던 중 가지고 있는 물건이 너무 많아 창고 정리를 하기로 했습니다. 선빈이가 보유한 게임 속 창고는 여러 칸으로 나누어져 있고 각 칸에는 물건들이 담겨있습니다. 창고를 정리할 방법을 고민하던 선빈이는 같은 물건이 여러 칸에 나누어 들어있는 것을 발견하고 우선 같은 물건끼리 최대한 겹쳐쌓는 방식으로 창고를 정리하기로 했습니다. 선빈이의 창고에 들어있는 물건의 이름과 개수는 리스트 형태로 주어지며, 한 칸에 겹쳐질 수 있는 물건의 개수에는 제한이 없다고 가정합니다. 예를 들어 창고의 각 칸에 담겨있는 물건의 이름이storage = ["pencil", "pencil", "pencil", "book"], 각 물건의 개수가 num = [2, 4, 3, 1]이라면 연필과 책을 한 칸에..
2024.01.11
no image
프로그래머스/C++ [PCCE 기출문제] 7번 / 가습기
문제 설명 상우가 사용하는 가습기에는 "auto", "target", "minimum"의 세 가지 모드가 있습니다. 가습기의 가습량은 0~5단계로 구분되며 각 모드 별 동작 방식은 다음과 같습니다. "auto" 모드 습도가 0 이상 10 미만인 경우 : 5단계 습도가 10 이상 20 미만인 경우 : 4단계 습도가 20 이상 30 미만인 경우 : 3단계 습도가 30 이상 40 미만인 경우 : 2단계 습도가 40 이상 50 미만인 경우 : 1단계 습도가 50 이상인 경우 : 0단계 "target" 모드 습도가 설정값 미만일 경우 : 3단계 습도가 설정값 이상일 경우 : 1단계 "minimum"모드 습도가 설정값 미만일 경우 : 1단계 습도가 설정값 이상일 경우 : 0단계 상우가 설정한 가습기의 모드를 나타낸..
2024.01.11
반응형

문제 설명

문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요.

제한 조건

  • s의 길이는 1 이상 5이하입니다.
  • s의 맨앞에는 부호(+, -)가 올 수 있습니다.
  • s는 부호와 숫자로만 이루어져있습니다.
  • s는 "0"으로 시작하지 않습니다.

입출력 예

예를들어 str이 "1234"이면 1234를 반환하고, "-1234"이면 -1234를 반환하면 됩니다.

str은 부호(+,-)와 숫자로만 구성되어 있고, 잘못된 값이 입력되는 경우는 없습니다.

#include <string>
#include <vector>

using namespace std;

int solution(string s) {
    long long ans = stoll(s);
    return ans;
}
반응형
반응형

문제 설명

문자열 s가 입력되었을 때 다음 규칙을 따라서 이 문자열을 여러 문자열로 분해하려고 합니다.

  • 먼저 첫 글자를 읽습니다. 이 글자를 x라고 합시다.
  • 이제 이 문자열을 왼쪽에서 오른쪽으로 읽어나가면서, x와 x가 아닌 다른 글자들이 나온 횟수를 각각 셉니다. 처음으로 두 횟수가 같아지는 순간 멈추고, 지금까지 읽은 문자열을 분리합니다.
  • s에서 분리한 문자열을 빼고 남은 부분에 대해서 이 과정을 반복합니다. 남은 부분이 없다면 종료합니다.
  • 만약 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없다면, 역시 지금까지 읽은 문자열을 분리하고, 종료합니다.

문자열 s가 매개변수로 주어질 때, 위 과정과 같이 문자열들로 분해하고, 분해한 문자열의 개수를 return 하는 함수 solution을 완성하세요.


제한사항

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

입출력 예

s result

"banana" 3
"abracadabra" 6
"aaabbaccccabba" 3

입출력 예 설명

입출력 예 #1

s="banana"인 경우 ba - na - na와 같이 분해됩니다.

입출력 예 #2

s="abracadabra"인 경우 ab - ra - ca - da - br - a와 같이 분해됩니다.

입출력 예 #3

s="aaabbaccccabba"인 경우 aaabbacc - ccab - ba와 같이 분해됩니다.

#include <string>
using namespace std;

int solution(string s) {
    int answer = 0;
    int i = 0;

    while (i < s.length()) {
        char x = s[i];  // 첫 글자를 x로 설정
        int x_count = 0, other_count = 0;

        // x와 다른 문자의 개수가 같아질 때까지 반복
        while (i < s.length()) {
            if (s[i] == x) {
                x_count++;
            } else {
                other_count++;
            }

            i++;

            // x의 개수와 다른 문자의 개수가 같아지면 분리
            if (x_count == other_count) {
                answer++;
                break;
            }
        }
        
        // 만약 반복문을 나왔는데 x_count와 other_count가 같지 않다면,
        // 남은 문자를 하나의 그룹으로 처리
        if (x_count != other_count) {
            answer++;
        }
    }

    return answer;
}

반응형
반응형

문제 설명

숫자로 이루어진 문자열 t와 p가 주어질 때, t에서 p와 길이가 같은 부분문자열 중에서, 이 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 return하는 함수 solution을 완성하세요.

예를 들어, t="3141592"이고 p="271" 인 경우, t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다. 이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다.


제한사항

  • 1 ≤ p의 길이 ≤ 18
  • p의 길이 ≤ t의 길이 ≤ 10,000
  • t와 p는 숫자로만 이루어진 문자열이며, 0으로 시작하지 않습니다.

입출력 예

t p result

"3141592" "271" 2
"500220839878" "7" 8
"10203" "15" 3

입출력 예 설명

입출력 예 #1

본문과 같습니다.

입출력 예 #2

p의 길이가 1이므로 t의 부분문자열은 "5", "0", 0", "2", "2", "0", "8", "3", "9", "8", "7", "8"이며 이중 7보다 작거나 같은 숫자는 "5", "0", "0", "2", "2", "0", "3", "7" 이렇게 8개가 있습니다.

입출력 예 #3

p의 길이가 2이므로 t의 부분문자열은 "10", "02", "20", "03"이며, 이중 15보다 작거나 같은 숫자는 "10", "02", "03" 이렇게 3개입니다. "02"와 "03"은 각각 2, 3에 해당한다는 점에 주의하세요

#include <string>
using namespace std;

int solution(string t, string p) {
    int answer = 0;
    long long p_num = stoll(p);  // p를 정수로 변환

    for (int i = 0; i <= t.length() - p.length(); i++) {
        string substring = t.substr(i, p.length());  // p와 같은 길이의 부분 문자열 추출
        long long sub_num = stoll(substring);  // 부분 문자열을 정수로 변환

        if (sub_num <= p_num) {
            answer++;
        }
    }

    return answer;
}

몰랐던 부분

string을 정수형으로 변환하는 법

  • stoi: string to int의 약자로, 문자열을 int 타입으로 변환합니다.
  • int number = stoi("12345"); // 문자열 "12345"를 정수 12345로 변환
  • stol: string to long의 약자로, 문자열을 long 타입으로 변환합니다.
  • long number = stol("12345"); // 문자열 "12345"를 long 타입 정수로 변환
  • stoll: string to long long의 약자로, 문자열을 long long 타입으로 변환합니다.
  • long long number = stoll("1234567890123"); // 큰 수를 long long 타입으로 변환
  • substr(pos, len): 특정 위치(pos)부터 지정한 길이(len)만큼 부분 문자열을 반환합니다.
반응형
반응형

문제 설명

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.

제한 조건

  • strings는 길이 1 이상, 50이하인 배열입니다.
  • strings의 원소는 소문자 알파벳으로 이루어져 있습니다.
  • strings의 원소는 길이 1 이상, 100이하인 문자열입니다.
  • 모든 strings의 원소의 길이는 n보다 큽니다.
  • 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.

입출력 예

strings n return

["sun", "bed", "car"] 1 ["car", "bed", "sun"]
["abce", "abcd", "cdx"] 2 ["abcd", "abce", "cdx"]

입출력 예 설명

입출력 예 1

"sun", "bed", "car"의 1번째 인덱스 값은 각각 "u", "e", "a" 입니다. 이를 기준으로 strings를 정렬하면 ["car", "bed", "sun"] 입니다.

입출력 예 2

"abce"와 "abcd", "cdx"의 2번째 인덱스 값은 "c", "c", "x"입니다. 따라서 정렬 후에는 "cdx"가 가장 뒤에 위치합니다. "abce"와 "abcd"는 사전순으로 정렬하면 "abcd"가 우선하므로, 답은 ["abcd", "abce", "cdx"] 입니다.

#include <string>
#include <vector>

using namespace std;

vector<string> solution(vector<string> strings, int n) {
    // 사용자 정의 정렬 함수 설정
    sort(strings.begin(), strings.end(), [n](const string &a, const string &b) {
        // n번째 문자가 다르면 n번째 문자를 기준으로 비교
        if (a[n] != b[n]) {
            return a[n] < b[n];
        }
        // n번째 문자가 같으면 사전순으로 비교
        return a < b;
    });
    
    return strings;
}

몰랐던것

  • sort(시작 반복자, 종료 반복자, 비교 함수);
  • 람다 함수 [n](const string &a, const string &b) { ... }
    • [n]캡처(capture) 부분입니다. 캡처는 람다 함수가 외부에서 선언된 변수를 사용할 수 있게 해줍니다. 여기서는 **n**을 캡처하여 람다 함수 내부에서 사용할 수 있게 합니다.
    • (const string &a, const string &b): 람다 함수의 매개변수 목록입니다. 여기서는 **const string &a**와 **const string &b**라는 두 개의 string 참조를 매개변수로 받습니다.
    • { ... }: 람다 함수의 본문으로, 두 매개변수 **a**와 **b**를 비교하여 true 또는 **false**를 반환합니다. 이 반환값은 sort 함수가 **a**와 **b**의 순서를 결정하는 데 사용합니다.

그냥 배열 []을 쓰지않고 vector를 쓰는 이유는 배열은 정적배열이고, vector는 동적 배열이다 벡터는 크기를 자유자제로 변하게할수있고, 일반 배열은 크기를 바꿀수없다.

vector<int> a;
a.push_back(10);  // 벡터에 요소 추가 가능
a.resize(5);      // 크기 조절 가능

int arr[5];       // 정적 배열은 크기 변경 불가능
  • vector<int>: 다양한 함수(size()push_back()pop_back()erase()clear()insert())가 제공되므로 사용이 편리하고 기능이 풍부합니다.
  • int[]: 기본적인 인덱스 접근 외에 별도의 메서드가 없습니다. 크기를 확인하려면 **sizeof**를 사용해야 합니다.
반응형
반응형

문제 설명

배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다.

예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면

  1. array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
  2. 1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.
  3. 2에서 나온 배열의 3번째 숫자는 5입니다.

배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요.

제한사항

  • array의 길이는 1 이상 100 이하입니다.
  • array의 각 원소는 1 이상 100 이하입니다.
  • commands의 길이는 1 이상 50 이하입니다.
  • commands의 각 원소는 길이가 3입니다.

입출력 예

array commands return

[1, 5, 2, 6, 3, 7, 4] [[2, 5, 3], [4, 4, 1], [1, 7, 3]] [5, 6, 3]

입출력 예 설명

[1, 5, 2, 6, 3, 7, 4]를 2번째부터 5번째까지 자른 후 정렬합니다. [2, 3, 5, 6]의 세 번째 숫자는 5입니다.

[1, 5, 2, 6, 3, 7, 4]를 4번째부터 4번째까지 자른 후 정렬합니다. [6]의 첫 번째 숫자는 6입니다.

[1, 5, 2, 6, 3, 7, 4]를 1번째부터 7번째까지 자릅니다. [1, 2, 3, 4, 5, 6, 7]의 세 번째 숫자는 3입니다.

#include <string>
#include <vector>
#include <algorithm> // 정렬에 필요한 헤더

using namespace std;

vector<int> solution(vector<int> array, vector<vector<int>> commands) {
    vector<int> answer;

    // 각 command에 대해 처리
    for (const auto& command : commands) {
        int i = command[0];
        int j = command[1];
        int k = command[2];
        
        // array의 i번째부터 j번째까지 자른 부분을 subArray에 저장
        vector<int> subArray(array.begin() + i - 1, array.begin() + j);
        
        // subArray 정렬
        sort(subArray.begin(), subArray.end());
        
        // k번째 요소를 answer에 추가
        answer.push_back(subArray[k - 1]);
    }
    
    return answer;
}

몰랐던 것들

  • push_back(value)
    • 벡터의 끝에 새로운 요소 **value**를 추가합니다.
    • 코드에서 **answer.push_back(subArray[k - 1]);**로 answer 벡터에 **k**번째 요소를 추가했습니다.
    answer.push_back(subArray[k - 1]);
    
  • begin()과 end()
    • begin(): 벡터의 첫 번째 요소를 가리키는 반복자를 반환합니다.
    • end(): 벡터의 마지막 요소 다음을 가리키는 반복자를 반환합니다.
    • 코드에서 부분 배열을 자를 때 **array.begin() + i - 1**과 **array.begin() + j**를 사용했습니다.
vector<int> subArray(array.begin() + i - 1, array.begin() + j);
  • sort(begin, end)
    • C++의 <algorithm> 헤더에 포함된 함수로, 지정된 범위 **[begin, end)**를 정렬합니다.
    • 코드에서 **sort(subArray.begin(), subArray.end());**로 subArray 벡터의 요소를 정렬했습니다.
    sort(subArray.begin(), subArray.end());
    
반응형
반응형

문제 설명

1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될 때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다.

1-1. 입력된 수가 짝수라면 2로 나눕니다. 1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다. 2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다.

예를 들어, 주어진 수가 6이라면 6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1 이 되어 총 8번 만에 1이 됩니다. 위 작업을 몇 번이나 반복해야 하는지 반환하는 함수, solution을 완성해 주세요. 단, 주어진 수가 1인 경우에는 0을, 작업을 500번 반복할 때까지 1이 되지 않는다면 –1을 반환해 주세요.

제한 사항

  • 입력된 수, num은 1 이상 8,000,000 미만인 정수입니다.

입출력 예

n result

6 8
16 4
626331 -1

입출력 예 설명

입출력 예 #1

문제의 설명과 같습니다.

입출력 예 #2

16 → 8 → 4 → 2 → 1 이 되어 총 4번 만에 1이 됩니다.

입출력 예 #3

626331은 500번을 시도해도 1이 되지 못하므로 -1을 리턴해야 합니다.


※ 공지 - 2022년 6월 10일 다음과 같이 지문이 일부 수정되었습니다.

  • 주어진 수가 1인 경우에 대한 조건 추가
#include <string>
#include <vector>

using namespace std;

int solution(int num) {
    int count = 0;
    
    while (num != 1) {
        if (count >= 500) { 
            return -1;
        }
        if (num % 2 == 0) {
            num /= 2;
        } else {
            num = num * 3 + 1;
        }
        count++;
    }
    
    return count; 
}

반응형
반응형

문제 설명

선빈이는 게임을 즐기던 중 가지고 있는 물건이 너무 많아 창고 정리를 하기로 했습니다. 선빈이가 보유한 게임 속 창고는 여러 칸으로 나누어져 있고 각 칸에는 물건들이 담겨있습니다. 창고를 정리할 방법을 고민하던 선빈이는 같은 물건이 여러 칸에 나누어 들어있는 것을 발견하고 우선 같은 물건끼리 최대한 겹쳐쌓는 방식으로 창고를 정리하기로 했습니다. 선빈이의 창고에 들어있는 물건의 이름과 개수는 리스트 형태로 주어지며, 한 칸에 겹쳐질 수 있는 물건의 개수에는 제한이 없다고 가정합니다.

예를 들어 창고의 각 칸에 담겨있는 물건의 이름이storage = ["pencil", "pencil", "pencil", "book"], 각 물건의 개수가 num = [2, 4, 3, 1]이라면 연필과 책을 한 칸에 각각 겹쳐 쌓아 간단하게 clean_storage = ["pencil", "book"], clean_num = [9, 1]로 만들 수 있습니다.

 

주어진 solution 함수는 정리되기 전 창고의 물건 이름이 담긴 문자열 리스트 storage와 각 물건의 개수가 담긴 정수 리스트 num이 주어질 때, 정리된 창고에서 개수가 가장 많은 물건의 이름을 return 하는 함수입니다. solution 함수가 올바르게 작동하도록 한 줄을 수정해 주세요.


제한사항

  • 1 ≤ storage의 길이 = num의 길이 ≤ 30
    • storage[i]는 영어 대소문자로 이루어져 있습니다.
    • 물건은 대소문자를 구분합니다. 즉, "Book"과 "book"은 서로 다른 물건입니다.
    • 1 ≤ storage[i]의 길이 ≤ 30
    • 1 ≤ num[i] ≤ 20
    • num[i]에는 storage[i]에 해당하는 물건의 개수가 담겨있습니다.
  • 가장 개수가 많은 물건이 두 가지 이상인 경우는 없습니다.
  • 한 칸에는 한 종류의 물건만 들어갈 수 있습니다.

입출력 예

storage num result

["pencil", "pencil", "pencil", "book"] [2, 4, 3, 1] "pencil"
["doll", "doll", "doll", "doll"] [1, 1, 1, 1] "doll"
["apple", "steel", "leaf", "apple", "leaf"] [5, 3, 5, 3, 7] "leaf"
["mirror", "net", "mirror", "net", "bottle"] [4, 1, 4, 1, 5] "mirror"

입출력 예 설명

입출력 예 #1

  • 본문에 설명된 대로 창고를 정리하면 clean_storage = ["pencil", "book"], clean_num = [9, 1]이 됩니다. 따라서 가장 개수가 많은 물건인 "pencil"을 return합니다.

입출력 예 #2

  • 창고를 정리하면 clean_storage = ["doll"], clean_num = [4]가 됩니다. 따라서 가장 개수가 많은 물건인 "doll"을 return합니다.

 

입출력 예 #3

  • 창고를 정리하면 clean_storage = ["apple", "steel", "leaf"], clean_num = [8, 3, 12]가 됩니다. 따라서 가장 개수가 많은 물건인 "leaf"를 return합니다.

 

입출력 예 #4

  • 창고를 정리하면 clean_storage = ["mirror", "net", "bottle"], clean_num = [8, 2, 5]가 됩니다. 따라서 가장 개수가 많은 물건인 "mirror"를 return합니다.

  • cpp를 응시하는 경우 리스트는 배열과 동일한 의미이니 풀이에 참고해주세요.
    • ex) 번호가 담긴 정수  numbers가 주어집니다. => 번호가 담긴 정수  numbers가 주어집니다.
  • java를 응시하는 경우 리스트는 배열, 함수는 메소드와 동일한 의미이니 풀이에 참고해주세요.
    • ex) solution 가 올바르게 작동하도록 한 줄을 수정해 주세요. => solution 가 올바르게 작동하도록 한 줄을 수정해 주세요.
#include <string>
#include <vector>

using namespace std;

string solution(vector<string> storage, vector<int> num) {
    int num_item = 0;
    vector<string> clean_storage(storage.size());
    vector<int> clean_num(num.size());
    
    for(int i=0; i<storage.size(); i++){
        int clean_idx = -1;
        for(int j=0; j<num_item; j++){
            if(storage[i] == clean_storage[j]){
                clean_idx = j;
                break;
            }
        }
        if(clean_idx == -1){
            clean_storage[num_item] = storage[i];
            clean_num[num_item] = num[i];
            num_item += 1;
        }
        else{
            clean_num[clean_idx] += num[i];
        }
    }
    
    // 아래 코드에는 틀린 부분이 없습니다.
    
    int num_max = -1;
    string answer = "";
    for(int i=0; i<num_item; i++){
        if(clean_num[i] > num_max){
            num_max = clean_num[i];
            answer = clean_storage[i];
        }
    }
    return answer;
}

 

반응형
반응형

문제 설명

상우가 사용하는 가습기에는 "auto", "target", "minimum"의 세 가지 모드가 있습니다. 가습기의 가습량은 0~5단계로 구분되며 각 모드 별 동작 방식은 다음과 같습니다.

  • "auto" 모드
    • 습도가 0 이상 10 미만인 경우 : 5단계
    • 습도가 10 이상 20 미만인 경우 : 4단계
    • 습도가 20 이상 30 미만인 경우 : 3단계
    • 습도가 30 이상 40 미만인 경우 : 2단계
    • 습도가 40 이상 50 미만인 경우 : 1단계
    • 습도가 50 이상인 경우 : 0단계
  • "target" 모드
    • 습도가 설정값 미만일 경우 : 3단계
    • 습도가 설정값 이상일 경우 : 1단계
  • "minimum"모드
    • 습도가 설정값 미만일 경우 : 1단계
    • 습도가 설정값 이상일 경우 : 0단계

상우가 설정한 가습기의 모드를 나타낸 문자열 mode_type, 현재 공기 중 습도를 나타낸 정수 humidity, 설정값을 나타낸 정수 val_set이 주어질 때 현재 가습기가 몇 단계로 작동 중인지 return하도록 빈칸을 채워 solution 함수를 완성해 주세요.


제한사항

  • mode_type은 "auto", "target", "minimum" 세 가지 중 하나의 값을 갖습니다.
  • 0 ≤ humidity, val_set ≤ 100

입출력 예

mode_type humidity val_set result

"auto" 23 45 3
"target" 41 40 1
"minimum" 10 34 1

입출력 예 설명

입출력 예 #1

  • "auto"모드이므로 습도에 따라 가습량이 조절됩니다. 현재 습도가 20 이상 30 미만이므로 3을 return합니다.

입출력 예 #2

  • "target"모드이고, 설정값보다 습도가 높으므로 1을 return합니다.

입출력 예 #3

  • "minimum"모드이고, 설정값보다 습도가 낮으므로 1을 return합니다.
#include <string>
#include <vector>

using namespace std;

int func1(int humidity, int val_set){
    if(humidity < val_set)
        return 
3
;
    return 1;
}

int func2(int humidity){
    if(humidity >= 50)
        return 0;
    else if (humidity >= 40)
        return 1;
    else if (humidity >= 30)
        return 2;
    else if (humidity >= 20)
        return 3;
    else if (humidity >= 10)
        return 4;
    
else

        
return 5
;
}

int func3(int humidity, int val_set){
    if(humidity < val_set)
        return 1;
    return 
0
;
}

int solution(string mode_type, int humidity, int val_set) {
    int answer = 0;
    if(mode_type == "auto"){
        answer = func
2(humidity)
;
    }
    else if(mode_type == "target"){
        answer = func
1(humidity, val_set)
;
    }
    else if(mode_type == "minimum"){
        answer = func
3(humidity, val_set)
;
    }
    return answer;
}

 

반응형