no image
프로그래머스/C++ 간단한 논리 연산
문제 설명 boolean 변수 x1, x2, x3, x4가 매개변수로 주어질 때, 다음의 식의 true/false를 return 하는 solution 함수를 작성해 주세요. (x1 ∨ x2) ∧ (x3 ∨ x4) 입출력 예 x1 x2 x3 x4 result false true true true true true false false false false 입출력 예 설명 입출력 예 #1 예제 1번의 x1, x2, x3, x4로 식을 계산하면 다음과 같습니다.따라서 true를 return 합니다. (x1 ∨ x2) ∧ (x3 ∨ x4) ≡ (F ∨ T) ∧ (T ∨ T) ≡ T ∧ T ≡ T 입출력 예 #2 예제 2번의 x1, x2, x3, x4로 식을 계산하면 다음과 같습니다.따라서 false를 retur..
2023.10.05
no image
프로그래머스/C++ 수열과 구간 쿼리 4
문제 설명 정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴입니다. 각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 i가 k의 배수이면 arr[i]에 1을 더합니다. 위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요. 제한사항 1 ≤ arr의 길이 ≤ 1,000 0 ≤ arr의 원소 ≤ 1,000,000 1 ≤ queries의 길이 ≤ 1,000 0 ≤ s ≤ e
2023.10.05
no image
프로그래머스/C++ 수열과 구간 쿼리 2
문제 설명 정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴입니다. 각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 k보다 크면서 가장 작은 arr[i]를 찾습니다. 각 쿼리의 순서에 맞게 답을 저장한 배열을 반환하는 solution 함수를 완성해 주세요. 단, 특정 쿼리의 답이 존재하지 않으면 -1을 저장합니다. 제한사항 1 ≤ arr의 길이 ≤ 1,000 0 ≤ arr의 원소 ≤ 1,000,000 1 ≤ queries의 길이 ≤ 1,000 0 ≤ s ≤ e
2023.10.04
no image
프로그래머스/C++ 콜라츠 수열 만들기
문제 설명 모든 자연수 x에 대해서 현재 값이 x이면 x가 짝수일 때는 2로 나누고, x가 홀수일 때는 3 * x + 1로 바꾸는 계산을 계속해서 반복하면 언젠가는 반드시 x가 1이 되는지 묻는 문제를 콜라츠 문제라고 부릅니다. 그리고 위 과정에서 거쳐간 모든 수를 기록한 수열을 콜라츠 수열이라고 부릅니다. 계산 결과 1,000 보다 작거나 같은 수에 대해서는 전부 언젠가 1에 도달한다는 것이 알려져 있습니다. 임의의 1,000 보다 작거나 같은 양의 정수 n이 주어질 때 초기값이 n인 콜라츠 수열을 return 하는 solution 함수를 완성해 주세요. 제한사항 1 ≤ n ≤ 1,000 입출력 예 n result 10 [10, 5, 16, 8, 4, 2, 1] 입출력 예 설명 입출력 예 #1 순서대로..
2023.10.02
no image
프로그래머스/C++ 카운트 업
문제 설명 정수 start_num와 end_num가 주어질 때, start_num부터 end_num까지의 숫자를 차례로 담은 리스트를 return하도록 solution 함수를 완성해주세요. 제한사항 0 ≤ start_num ≤ end_num ≤ 50 입출력 예 start_num end_num result 3 10 [3, 4, 5, 6, 7, 8, 9, 10] 입출력 예 설명 입출력 예 #1 3부터 10까지의 숫자들을 담은 리스트 [3, 4, 5, 6, 7, 8, 9, 10]를 return합니다. #include #include using namespace std; vector solution(int start_num, int end_num) { vector answer; for(int i=start_nu..
2023.10.02
no image
프로그래머스/C++ 수열과 구간 쿼리 3
문제 설명 정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [i, j] 꼴입니다. 각 query마다 순서대로 arr[i]의 값과 arr[j]의 값을 서로 바꿉니다. 위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요. 제한사항 1 ≤ arr의 길이 ≤ 1,000 0 ≤ arr의 원소 ≤ 1,000,000 1 ≤ queries의 길이 ≤ 1,000 0 ≤ i
2023.09.27
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
반응형

문제 설명

boolean 변수 x1, x2, x3, x4가 매개변수로 주어질 때, 다음의 식의 true/false를 return 하는 solution 함수를 작성해 주세요.

  • (x1 ∨ x2) ∧ (x3 ∨ x4)

입출력 예

x1 x2 x3 x4 result

false true true true true
true false false false false

입출력 예 설명

입출력 예 #1

  • 예제 1번의 x1, x2, x3, x4로 식을 계산하면 다음과 같습니다.따라서 true를 return 합니다.
  • (x1 ∨ x2) ∧ (x3 ∨ x4) ≡ (F ∨ T) ∧ (T ∨ T) ≡ T ∧ T ≡ T

입출력 예 #2

  • 예제 2번의 x1, x2, x3, x4로 식을 계산하면 다음과 같습니다.따라서 false를 return 합니다.
  • (x1 ∨ x2) ∧ (x3 ∨ x4) ≡ (T ∨ F) ∧ (F ∨ F) ≡ T ∧ F ≡ F

  • ∨과 ∧의 진리표는 다음과 같습니다.x y x ∨ y x ∧ y
    T T T T
    T F T F
    F T T F
    F F F F
    #include <string>
    #include <vector>
    
    using namespace std;
    
    bool solution(bool x1, bool x2, bool x3, bool x4) {
        bool answer = true;
        if( (x1 || x2) && (x3 || x4) ){
            return answer;
        }
        else return answer=false;
    }
    
반응형
반응형

문제 설명

정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴입니다.

각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 i가 k의 배수이면 arr[i]에 1을 더합니다.

위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.


제한사항

  • 1 ≤ arr의 길이 ≤ 1,000
    • 0 ≤ arr의 원소 ≤ 1,000,000
  • 1 ≤ queries의 길이 ≤ 1,000
    • 0 ≤ s ≤ e < arr의 길이
    • 0 ≤ k ≤ 5

입출력 예

arr queries result

[0, 1, 2, 4, 3] [[0, 4, 1],[0, 3, 2],[0, 3, 3]] [3, 2, 4, 6, 4]

입출력 예 설명

입출력 예 #1

  • 각 쿼리에 따라 arr가 다음과 같이 변합니다.

arr


[0, 1, 2, 4, 3]


[1, 2, 3, 5, 4]


[2, 2, 4, 5, 4]


[3, 2, 4, 6, 4]


  • 따라서 [3, 2, 4, 6, 4]를 return 합니다.
#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> arr, vector<vector<int>> queries) {
    vector<int> answer;
    for(auto que : queries){
        int s = que[0];
        int e = que[1];
        int k = que[2];
        
        for(int i=s; i<=e; i++){
            if(i%k==0) arr[i] += 1;
        }
    }
    answer = arr;
    return answer;
}

 

반응형
반응형

문제 설명

정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴입니다.

각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 k보다 크면서 가장 작은 arr[i]를 찾습니다.

각 쿼리의 순서에 맞게 답을 저장한 배열을 반환하는 solution 함수를 완성해 주세요.

단, 특정 쿼리의 답이 존재하지 않으면 -1을 저장합니다.


제한사항

  • 1 ≤ arr의 길이 ≤ 1,000
    • 0 ≤ arr의 원소 ≤ 1,000,000
  • 1 ≤ queries의 길이 ≤ 1,000
    • 0 ≤ s ≤ e < arr의 길이
    • 0 ≤ k ≤ 1,000,000

입출력 예

arr queries result

[0, 1, 2, 4, 3] [[0, 4, 2],[0, 3, 2],[0, 2, 2]] [3, 4, -1]

입출력 예 설명

입출력 예 #1

  • 첫 번째 쿼리의 범위에는 0, 1, 2, 4, 3이 있으며 이 중 2보다 크면서 가장 작은 값은 3입니다.
  • 두 번째 쿼리의 범위에는 0, 1, 2, 4가 있으며 이 중 2보다 크면서 가장 작은 값은 4입니다.
  • 세 번째 쿼리의 범위에는 0, 1, 2가 있으며 여기에는 2보다 큰 값이 없습니다.
  • 따라서 [3, 4, -1]을 return 합니다.
#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> arr, vector<vector<int>> queries) {
    vector<int> answer;
    
    for(int i=0; i<queries.size(); i++){
        int min = -1;
        
            for(int j=queries[i][0]; j<=queries[i][1]; j++){
                if(queries[i][2] < arr[j]){
                    if(min == -1 || arr[j] < arr[min]){
                        min = j;
                    }
                }
            }
        
        if(min == -1) answer.push_back(-1);
        else answer.push_back(arr[min]);
    }
    
    return answer;
}

 

반응형
반응형

문제 설명

모든 자연수 x에 대해서 현재 값이 x이면 x가 짝수일 때는 2로 나누고, x가 홀수일 때는 3 * x + 1로 바꾸는 계산을 계속해서 반복하면 언젠가는 반드시 x가 1이 되는지 묻는 문제를 콜라츠 문제라고 부릅니다.

그리고 위 과정에서 거쳐간 모든 수를 기록한 수열을 콜라츠 수열이라고 부릅니다.

계산 결과 1,000 보다 작거나 같은 수에 대해서는 전부 언젠가 1에 도달한다는 것이 알려져 있습니다.

임의의 1,000 보다 작거나 같은 양의 정수 n이 주어질 때 초기값이 n인 콜라츠 수열을 return 하는 solution 함수를 완성해 주세요.


제한사항

  • 1 ≤ n ≤ 1,000

입출력 예

n result

10 [10, 5, 16, 8, 4, 2, 1]

입출력 예 설명

입출력 예 #1

  • 순서대로 연산한 결과를 표로 만들면 다음과 같습니다.

연산 횟수 x 홀짝 여부

0 10 짝수
1 5 홀수
2 16 짝수
3 8 짝수
4 4 짝수
5 2 짝수
6 1 홀수
  • 따라서 [10, 5, 16, 8, 4, 2, 1]을 return 합니다.
#include <string>
#include <vector>

using namespace std;

vector<int> solution(int n) {
    vector<int> answer;
    
    while(n!=1){
        answer.push_back(n);
        if(n%2==0) n = n/2;
        else n = n*3+1;
    }
    answer.push_back(1);
    return answer;
}

짝수일때 홀수일때를 나눠서 값을 계속 바꿔준다.

반응형
반응형

문제 설명

정수 start_num와 end_num가 주어질 때, start_num부터 end_num까지의 숫자를 차례로 담은 리스트를 return하도록 solution 함수를 완성해주세요.


제한사항

  • 0 ≤ start_num ≤ end_num ≤ 50

입출력 예

start_num end_num result

3 10 [3, 4, 5, 6, 7, 8, 9, 10]

입출력 예 설명

입출력 예 #1

  • 3부터 10까지의 숫자들을 담은 리스트 [3, 4, 5, 6, 7, 8, 9, 10]를 return합니다.
#include <string>
#include <vector>

using namespace std;

vector<int> solution(int start_num, int end_num) {
    vector<int> answer;
    for(int i=start_num; i<=end_num; i++) answer.push_back(i);
    return answer;
}

 

반응형
반응형

문제 설명

정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [i, j] 꼴입니다.

각 query마다 순서대로 arr[i]의 값과 arr[j]의 값을 서로 바꿉니다.

위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.


제한사항

  • 1 ≤ arr의 길이 ≤ 1,000
    • 0 ≤ arr의 원소 ≤ 1,000,000
  • 1 ≤ queries의 길이 ≤ 1,000
    • 0 ≤ i < j < arr의 길이

입출력 예

arr queries result

[0, 1, 2, 3, 4] [[0, 3],[1, 2],[1, 4]] [3, 4, 1, 0, 2]

입출력 예 설명

입출력 예 #1

  • 각 쿼리에 따라 arr가 다음과 같이 변합니다.

arr


[0, 1, 2, 3, 4]


[3, 1, 2, 0, 4]


[3, 2, 1, 0, 4]


[3, 4, 1, 0, 2]


  • 따라서 [3, 4, 1, 0, 2]를 return 합니다.
#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> arr, vector<vector<int>> queries) {
    vector<int> answer;
    for(int i=0; i< queries.size(); i++){
        int temp = arr[queries[i][0]];
        arr[queries[i][0]] = arr[queries[i][1]];
        arr[queries[i][1]] = temp;
    }
    for(int i=0; i<arr.size(); i++) answer.push_back(arr[i]);
    
    return answer;
}

배열을 잘 쓴다고 생각했지만 아직 너무나 부족하다.. 연습을 많이 해야겠다.

생각해보면 Buble Sort 하는 개념이랑 비슷한것같다. 2차원배열이라 어려워 보일뿐인듯 하다.

 

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> arr, vector<vector<int>> queries) {

    for(const auto& q : queries)
    {
        swap(arr[q[0]],arr[q[1]]);
    }
    return arr;
}

스왑으로도 하는 방법이 있었다..와우..

반응형
반응형

문제 설명

정수 배열 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을 이용한 간단한 코드로.. 크..이게 코딩이지

반응형