no image
프로그래머스/C++ 수 조작하기 2
문제 설명 정수 배열 numLog가 주어집니다. 처음에 numLog[0]에서 부터 시작해 "w", "a", "s", "d"로 이루어진 문자열을 입력으로 받아 순서대로 다음과 같은 조작을 했다고 합시다. "w" : 수에 1을 더한다. "s" : 수에 1을 뺀다. "d" : 수에 10을 더한다. "a" : 수에 10을 뺀다. 그리고 매번 조작을 할 때마다 결괏값을 기록한 정수 배열이 numLog입니다. 즉, numLog[i]는 numLog[0]로부터 총 i번의 조작을 가한 결과가 저장되어 있습니다. 주어진 정수 배열 numLog에 대해 조작을 위해 입력받은 문자열을 return 하는 solution 함수를 완성해 주세요. 제한사항 2 ≤ numLog의 길이 ≤ 100,000 100,000 ≤ numLog[0..
2023.09.27
no image
프로그래머스/C++ 수 조작하기 1
문제 설명 정수 n과 문자열 control이 주어집니다. control은 "w", "a", "s", "d"의 4개의 문자로 이루어져 있으며, control의 앞에서부터 순서대로 문자에 따라 n의 값을 바꿉니다. "w" : n이 1 커집니다. "s" : n이 1 작아집니다. "d" : n이 10 커집니다. "a" : n이 10 작아집니다. 위 규칙에 따라 n을 바꿨을 때 가장 마지막에 나오는 n의 값을 return 하는 solution 함수를 완성해 주세요. 제한사항 100,000 ≤ n ≤ 100,000 1 ≤ control의 길이 ≤ 100,000 control은 알파벳 소문자 "w", "a", "s", "d"로 이루어진 문자열입니다. 입출력 예 n control result 0 "wsdawsdassw..
2023.09.27
프로그래머스/C++ 마지막 두 원소
문제 설명 정수 리스트 num_list가 주어질 때, 마지막 원소가 그전 원소보다 크면 마지막 원소에서 그전 원소를 뺀 값을 마지막 원소가 그전 원소보다 크지 않다면 마지막 원소를 두 배한 값을 추가하여 return하도록 solution 함수를 완성해주세요. 제한사항 2 ≤ num_list의 길이 ≤ 10 1 ≤ num_list의 원소 ≤ 9 입출력 예 num_list result [2, 1, 6] [2, 1, 6, 5] [5, 2, 1, 7, 5] [5, 2, 1, 7, 5, 10] 입출력 예 설명 입출력 예 #1 마지막 원소인 6이 그전 원소인 1보다 크기 때문에 6 - 1인 5를 추가해 return합니다. 입출력 예 #2 마지막 원소인 5가 그전 원소인 7보다 크지 않기 때문에 5의 두 배인 10을..
2023.09.27
프로그래머스/C++ 원소들의 곱과 합
문제 설명 정수가 담긴 리스트 num_list가 주어질 때, 모든 원소들의 곱이 모든 원소들의 합의 제곱보다 작으면 1을 크면 0을 return하도록 solution 함수를 완성해주세요. 제한사항 2 ≤ num_list의 길이 ≤ 10 1 ≤ num_list의 원소 ≤ 9 입출력 예 num_list result [3, 4, 5, 2, 1] 1 [5, 7, 8, 3] 0 입출력 예 설명 입출력 예 #1 모든 원소의 곱은 120, 합의 제곱은 225이므로 1을 return합니다. 입출력 예 #2 모든 원소의 곱은 840, 합의 제곱은 529이므로 0을 return합니다. #include #include #include #include using namespace std; int solution(vector ..
2023.09.26
프로그래머스/C++ 등차수열의 특정한 항만 더하기
#include #include using namespace std; int solution(int a, int d, vector included) { int answer = 0; for(int i=0; i
2023.09.25
프로그래머스/C++ 코드 처리하기
문제 설명 문자열 code가 주어집니다. code를 앞에서부터 읽으면서 만약 문자가 "1"이면 mode를 바꿉니다. mode에 따라 code를 읽어가면서 문자열 ret을 만들어냅니다. mode는 0과 1이 있으며, idx를 0 부터 code의 길이 - 1 까지 1씩 키워나가면서 code[idx]의 값에 따라 다음과 같이 행동합니다. mode가 0일 때 code[idx]가 "1"이 아니면 idx가 짝수일 때만 ret의 맨 뒤에 code[idx]를 추가합니다. code[idx]가 "1"이면 mode를 0에서 1로 바꿉니다. mode가 1일 때 code[idx]가 "1"이 아니면 idx가 홀수일 때만 ret의 맨 뒤에 code[idx]를 추가합니다. code[idx]가 "1"이면 mode를 1에서 0으로 바꿉..
2023.09.24
프로그래머스/C++ flag에 따라 다른 값 반환하기
#include #include using namespace std; int solution(int a, int b, bool flag) { int answer = 0; if(flag == true){ answer = a + b; } else{ answer = a-b; } return answer; }
2023.09.24
프로그래머스/C++ 조건문자열
#include #include using namespace std; int solution(string ineq, string eq, int n, int m) { int answer = 0; if(ineq == "" && eq == "!" && n>m){ answer = 1; } else answer = 0; return answer; } 이거는 다른 방법을 찾아보려했지만 블로그도 다른 방법이 없었다 조건문을 잘 쓰는것도 중요하니까 나름 코드 짜보면서 재밌었다. 간단하면서 복잡하지않은 문제였다.
2023.09.24
반응형

문제 설명

정수 배열 numLog가 주어집니다. 처음에 numLog[0]에서 부터 시작해 "w", "a", "s", "d"로 이루어진 문자열을 입력으로 받아 순서대로 다음과 같은 조작을 했다고 합시다.

  • "w" : 수에 1을 더한다.
  • "s" : 수에 1을 뺀다.
  • "d" : 수에 10을 더한다.
  • "a" : 수에 10을 뺀다.

그리고 매번 조작을 할 때마다 결괏값을 기록한 정수 배열이 numLog입니다. 즉, numLog[i]는 numLog[0]로부터 총 i번의 조작을 가한 결과가 저장되어 있습니다.

주어진 정수 배열 numLog에 대해 조작을 위해 입력받은 문자열을 return 하는 solution 함수를 완성해 주세요.


제한사항

  • 2 ≤ numLog의 길이 ≤ 100,000
    • 100,000 ≤ numLog[0] ≤ 100,000
    • 1 ≤ i ≤ numLog의 길이인 모든 i에 대해 |numLog[i] - numLog[i - 1]|의 값은 1 또는 10입니다.

입출력 예

numLog result

[0, 1, 0, 10, 0, 1, 0, 10, 0, -1, -2, -1] "wsdawsdassw"

입출력 예 설명

입출력 예 #1

  • result인 "wsdawsdassw"를 따라 numLog[0]에서부터 시작해 조작을 하면 numLog의 값과 순서대로 일치합니다. 따라서 "wsdawsdassw"를 return 합니다.

Hint

"수 조작하기 1" 문제의 n값이 numLog[0]에 해당하며, 이 문제에서 주어진 numLog에 따라 "수 조작하기 1" 문제의 control을 구하는 문제라고 이해할 수 있습니다.

입출력 예 #1은 "수 조작하기 1" 문제의 입출력 예 #1과 같은 예시이므로 참고하시기 바랍니다.

#include <string>
#include <vector>

using namespace std;

string solution(vector<int> numLog) {
    string answer = "";
    int num = 0;
    for(int i=1; i<numLog.size(); i++){
        num = numLog[i] - numLog[i-1];
        if(num == 1 ) answer += "w";
        else if(num == -1) answer += "s";
        else if(num == 10) answer +="d";
        else if(num == -10) answer += "a";
    }
    
    
    return answer;
}

하..전에 풀었던 수 조작하기 1에서 map을 이용해 풀어볼려했지만 부족했다 다시 풀어보자.

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

using namespace std;

string solution(vector<int> numLog) {
    string answer = "";
    map <int, char> m = {{1, 'w'}, {-1, 's'}, {10, 'd'}, {-10, 'a'}};
    for(int i=1; i<numLog.size(); i++){
        answer += m[numLog[i] - numLog[i-1]];
    }
    
    
    return answer;
}

후..이런식으로도 문제를 풀수있다.. map을 잘 활용해보자.

반응형
반응형

문제 설명

정수 n과 문자열 control이 주어집니다. control은 "w", "a", "s", "d"의 4개의 문자로 이루어져 있으며, control의 앞에서부터 순서대로 문자에 따라 n의 값을 바꿉니다.

  • "w" : n이 1 커집니다.
  • "s" : n이 1 작아집니다.
  • "d" : n이 10 커집니다.
  • "a" : n이 10 작아집니다.

위 규칙에 따라 n을 바꿨을 때 가장 마지막에 나오는 n의 값을 return 하는 solution 함수를 완성해 주세요.


제한사항

  • 100,000 ≤ n ≤ 100,000
  • 1 ≤ control의 길이 ≤ 100,000
    • control은 알파벳 소문자 "w", "a", "s", "d"로 이루어진 문자열입니다.

입출력 예

n control result

0 "wsdawsdassw" -1

입출력 예 설명

입출력 예 #1

  • 수 n은 control에 따라 다음과 같은 순서로 변하게 됩니다.
  • 0 → 1 → 0 → 10 → 0 → 1 → 0 → 10 → 0 → -1 → -2 → -1
  • 따라서 -1을 return 합니다.
#include <string>
#include <vector>

using namespace std;

int solution(int n, string control) {
    int answer = 0;
    for(int i=0; i<control.size(); i++){
        char sel = control[i];
        switch(sel){
            case 'w':
                n ++; break;
            case 's':
                n --; break;
            case 'd':
                n += 10; break;
            case 'a':
                n -= 10; break;
        }
    }
    answer = n;
    
    return answer;
}

다른버전

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

map <char, int> m = {{'w', 1}, {'s', -1}, {'d', 10}, {'a', -10}};
int solution(int n, string control) {
    int answer = n;
    for(char ch : control)
        answer += m[ch];
    return answer;
}

와.. 이거보고 놀랐다 이런식으로도 코드를 쓸수있구나 라는걸..많이 배워야겠다..

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

using namespace std;

int solution(int n, string control) {
    int answer = 0;
    map <char, int> m = {{'w', 1}, {'s', -1}, {'d', 10}, {'a', -10}};
    for(char con : control){
        n += m[con];
    }
    answer = n;
    
    return answer;
}

이건 참고하고 내가 만들어본 코드다. 앞으로 이런 방식도 많이 써 봐야겠다

foreach문이랑 map을 이용한 간단한 코드로.. 크..이게 코딩이지

반응형
반응형

문제 설명

정수 리스트 num_list가 주어질 때, 마지막 원소가 그전 원소보다 크면 마지막 원소에서 그전 원소를 뺀 값을 마지막 원소가 그전 원소보다 크지 않다면 마지막 원소를 두 배한 값을 추가하여 return하도록 solution 함수를 완성해주세요.


제한사항

  • 2 ≤ num_list의 길이 ≤ 10
  • 1 ≤ num_list의 원소 ≤ 9

입출력 예

num_list result

[2, 1, 6] [2, 1, 6, 5]
[5, 2, 1, 7, 5] [5, 2, 1, 7, 5, 10]

입출력 예 설명

입출력 예 #1

  • 마지막 원소인 6이 그전 원소인 1보다 크기 때문에 6 - 1인 5를 추가해 return합니다.

입출력 예 #2

  • 마지막 원소인 5가 그전 원소인 7보다 크지 않기 때문에 5의 두 배인 10을 추가해 return합니다.
#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> num_list) {
    vector<int> answer = num_list;
    int a1 = answer[answer.size()-2];
    int a2 = answer[answer.size()-1];
    if(a2 > a1) answer.push_back(a2-a1);
    else answer.push_back(a2*2);
    
    return answer;
}

 

반응형
반응형

문제 설명

정수가 담긴 리스트 num_list가 주어질 때, 모든 원소들의 곱이 모든 원소들의 합의 제곱보다 작으면 1을 크면 0을 return하도록 solution 함수를 완성해주세요.


제한사항

  • 2 ≤ num_list의 길이 ≤ 10
  • 1 ≤ num_list의 원소 ≤ 9

입출력 예

num_list result

[3, 4, 5, 2, 1] 1
[5, 7, 8, 3] 0

 


입출력 예 설명

입출력 예 #1

  • 모든 원소의 곱은 120, 합의 제곱은 225이므로 1을 return합니다.

입출력 예 #2

  • 모든 원소의 곱은 840, 합의 제곱은 529이므로 0을 return합니다.
#include <string>
#include <vector>
#include <cmath>
#include <iostream>

using namespace std;

int solution(vector<int> num_list) {
    int answer = 0;
    int num_mul = 1;
    int sum_squared = 0;
    for(int i=0; i<num_list.size(); i++){
        num_mul *= num_list[i];
        sum_squared += num_list[i];
    }
    sum_squared = pow(sum_squared,2);
    if(sum_squared < num_mul) answer = 0;
    else answer = 1;
    
    return answer;
}

 

반응형
반응형
#include <string>
#include <vector>

using namespace std;

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

확실히 코딩을 잘하려면 코드를 줄이는 방법이나 수학적으로 생각을 많이 해야된다 이것도 생각을 깊이 해보고 코드를 줄인것이다. 그냥 문제를 많이 풀어보는게 답인듯하다..

반응형
반응형

문제 설명

문자열 code가 주어집니다.

code를 앞에서부터 읽으면서 만약 문자가 "1"이면 mode를 바꿉니다. mode에 따라 code를 읽어가면서 문자열 ret을 만들어냅니다.

mode는 0과 1이 있으며, idx를 0 부터 code의 길이 - 1 까지 1씩 키워나가면서 code[idx]의 값에 따라 다음과 같이 행동합니다.

  • mode가 0일 때
    • code[idx]가 "1"이 아니면 idx가 짝수일 때만 ret의 맨 뒤에 code[idx]를 추가합니다.
    • code[idx]가 "1"이면 mode를 0에서 1로 바꿉니다.
  • mode가 1일 때
    • code[idx]가 "1"이 아니면 idx가 홀수일 때만 ret의 맨 뒤에 code[idx]를 추가합니다.
    • code[idx]가 "1"이면 mode를 1에서 0으로 바꿉니다.

문자열 code를 통해 만들어진 문자열 ret를 return 하는 solution 함수를 완성해 주세요.

단, 시작할 때 mode는 0이며, return 하려는 ret가 만약 빈 문자열이라면 대신 "EMPTY"를 return 합니다.


제한사항

  • 1 ≤ code의 길이 ≤ 100,000
    • code는 알파벳 소문자 또는 "1"로 이루어진 문자열입니다.

입출력 예

 code                               result

"abc1abc1abc" "acbac"

 


입출력 예 설명

입출력 예 #1

  • code의 각 인덱스 i에 따라 다음과 같이 mode와 ret가 변합니다.

i code[i] mode ret

0 "a" 0 "a"
1 "b" 0 "a"
2 "c" 0 "ac"
3 "1" 1 "ac"
4 "a" 1 "ac"
5 "b" 1 "acb"
6 "c" 1 "acb"
7 "1" 0 "acb"
8 "a" 0 "acba"
9 "b" 0 "acba"
10 "c" 0 "acbac"

따라서 "acbac"를 return 합니다.

#include <string>
#include <vector>

using namespace std;

string solution(string code) {
    string answer = "";
    string ret = "";
    bool mode = false;
    
    for(int i=0; i<code.size(); i++){
        if(code[i] == '1') mode = !mode;
        else if(mode == false && i%2==0) ret += code[i];
        else if(mode == true && i%2==1) ret += code[i];
    }
    if(ret.empty()) answer = "EMPTY";
    else answer = ret;
    
    return answer;
}

오 조금 시간이 걸린 코드였다 중간에 1이 문자열에 자꾸 들어가서 살짝 고생했지만

if문을 전체로 묶어서 했으면 될만한 문제였다.. 그렇게 어려운 문제는 아니였는데 ㅠㅜ 다음부터는 꼼꼼히 보자..

반응형
반응형
#include <string>
#include <vector>

using namespace std;

int solution(int a, int b, bool flag) {
    int answer = 0;
    if(flag == true){
        answer = a + b;
    }
    else{
        answer = a-b;
    }
    
    return answer;
}
반응형
반응형
#include <string>
#include <vector>

using namespace std;

int solution(string ineq, string eq, int n, int m) {
    int answer = 0;
     
    if(ineq == "<" && eq == "=" && n<=m || ineq == "<" && eq =="!" && n<m ||
        ineq == ">" && eq == "=" && n>=m || ineq == ">" && eq == "!" && n>m){
        answer = 1;
    }
    else answer = 0;
    
    return answer;
}

이거는 다른 방법을 찾아보려했지만 블로그도 다른 방법이 없었다 조건문을 잘 쓰는것도 중요하니까 나름 코드 짜보면서 재밌었다. 간단하면서 복잡하지않은 문제였다.

반응형