기록 보관소

[프로그래머스] 코딩 기초 트레이닝 PART 11(C++) 본문

코딩 테스트/프로그래머스

[프로그래머스] 코딩 기초 트레이닝 PART 11(C++)

JongHoon 2024. 1. 18. 21:37

프로그래머스 코딩 테스트 연습 : 코딩 기초 트레이닝(C++)

https://school.programmers.co.kr/learn/challenges?order=recent&languages=cpp&partIds=44139&page=3

 

코딩테스트 연습 | 프로그래머스 스쿨

개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!

school.programmers.co.kr


프로그래머스 코딩 기초 트레이닝 : 문자 개수 세기

https://school.programmers.co.kr/learn/courses/30/lessons/181902

 

프로그래머스

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

programmers.co.kr


문제 설명

알파벳 대소문자로만 이루어진 문자열 my_string이 주어질 때, my_string에서 'A'의 개수, my_string에서 'B'의 개수,..., my_string에서 'Z'의 개수, my_string에서 'a'의 개수, my_string에서 'b'의 개수,..., my_string에서 'z'의 개수를 순서대로 담은 길이 52의 정수 배열을 return 하는 solution 함수를 작성해 주세요.


제한사항

  • 1 ≤ my_string의 길이 ≤ 1,000

입출력 예

입출력 예
입출력 예 설명


코드

#include <string>
#include <vector>

using namespace std;

vector<int> solution(string my_string) {
    vector<int> answer(52,0);
    
    int n = 65;
    
    for (int i = 0; i < 52; i++) {
        if (i >= 26)
            n = 71;
        
        for (int j = 0; j < my_string.size(); j++)
            if (my_string[j] == (i + n))
                answer[i]++;
    }
    
    return answer;
}
// 다른 사람의 풀이 1 : 배열의 index에 문자를 빼는 방법

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

vector<int> solution(string my_string) {
    vector<int> answer(52,0);
    for(const auto& ch : my_string)
    {
        if(ch>='a')
        {
            answer[(ch-'a')+26]++;
        } 
        else
        {
            answer[ch-'A']++;
        }

    }
    return answer;
}
// 다른 사람의 풀이 2 : isupper, islower를 사용한 방법

#include <string>
#include <vector>

using namespace std;

vector<int> solution(string my_string) {
    vector<int> answer(52);

    for(const auto c : my_string)
    {
        if(isupper(c))
        {
            answer[c-'A']++;
        }
        else if(islower(c))
        {
            answer[c-'a'+26]++;
        }
    }

    return answer;
}

결과


프로그래머스 코딩 기초 트레이닝 : 배열 만들기 1

https://school.programmers.co.kr/learn/courses/30/lessons/181901

 

프로그래머스

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

programmers.co.kr


문제 설명

정수 n과 k가 주어졌을 때, 1 이상 n이하의 정수 중에서 k의 배수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.


제한사항

  • 1 ≤ n ≤ 1,000,000
  • 1 ≤ k ≤ min(1,000, n)

입출력 예

입출력 예
입출력 예 설명


코드

#include <string>
#include <vector>

using namespace std;

vector<int> solution(int n, int k) {
    vector<int> answer;
    
    for (int i = 1; i <= n; i++)
        if (i % k == 0)
            answer.push_back(i);
    
    return answer;
}
// 다른 사람의 풀이 : for문만으로 해결하는 방법

#include <string>
#include <vector>

using namespace std;

vector<int> solution(int n, int k) {
    vector<int> answer;
    for(int t = k; t <= n; t += k)
    {
        answer.emplace_back(t);
    }
    return answer;
}

결과


프로그래머스 코딩 기초 트레이닝 : 글자 지우기

https://school.programmers.co.kr/learn/courses/30/lessons/181900

 

프로그래머스

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

programmers.co.kr


문제 설명

문자열 my_string과 정수 배열 indices가 주어질 때, my_string에서 indices의 원소에 해당하는 인덱스의 글자를 지우고 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.


제한사항

  • 1 ≤ indices의 길이 < my_string의 길이 ≤ 100
  • my_string은 영소문자로만 이루어져 있습니다.
  • 0 ≤ indices의 원소 < my_string의 길이
  • indices의 원소는 모두 서로 다릅니다.

입출력 예

입출력 예
입출력 예 설명


코드

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

using namespace std;

string solution(string my_string, vector<int> indices) {
    sort(indices.begin(), indices.end(), greater<>());
    
    for (int i : indices)
        my_string.erase(i, 1);
    
    return my_string;
}
// 다른 사람의 풀이 : 삭제할 문자를 빈칸으로 바꾼 후, 빈칸을 제거하는 방법

#include <string>
#include <vector>

using namespace std;

string solution(string my_string, vector<int> indices) {
    string answer = "";
    for(const auto v : indices)
    {
        my_string[v] = ' ';
    }

    for(const auto c : my_string)
    {
        if(c != ' ')
        {
            answer += c;
        }
    }

    return answer;
}

결과


프로그래머스 코딩 기초 트레이닝 : 카운트 다운

https://school.programmers.co.kr/learn/courses/30/lessons/181899

 

프로그래머스

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

programmers.co.kr


문제 설명

정수 start_num와 end_num가 주어질 때, start_num에서 end_num까지 1씩 감소하는 수들을 차례로 담은 리스트를 return하도록 solution 함수를 완성해주세요.


제한사항

  • 0 ≤ end_num ≤ start_num ≤ 50

입출력 예

입출력 예
입출력 예 설명


코드

#include <string>
#include <vector>

using namespace std;

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

결과


프로그래머스 코딩 기초 트레이닝 : 가까운 1 찾기

https://school.programmers.co.kr/learn/courses/30/lessons/181898

 

프로그래머스

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

programmers.co.kr


문제 설명

정수 배열 arr가 주어집니다. 이때 arr의 원소는 1 또는 0입니다.

정수 idx가 주어졌을 때, idx보다 크면서 배열의 값이 1인 가장 작은 인덱스를 찾아서 반환하는 solution 함수를 완성해 주세요.

단, 만약 그러한 인덱스가 없다면 -1을 반환합니다.


제한사항

  • 3 ≤ arr의 길이 ≤ 100'000
    • arr의 원소는 전부 1 또는 0입니다.

입출력 예

입출력 예
입출력 예 설명


코드

#include <string>
#include <vector>

using namespace std;

int solution(vector<int> arr, int idx) {
    int answer = -1;
    
    for (int i = idx; i < arr.size(); i++)
        if (arr[i] == 1) {
            answer = i;
            break;
        }
    
    return answer;
}
// 다른 사람의 풀이 : 변수를 사용하지 않고 해결한 방법

#include <string>
#include <vector>

using namespace std;

int solution(vector<int> arr, int idx) {
    for (int i = 0; i < arr.size(); ++i)
        if (i >= idx && arr[i] == 1)
            return i;
    return -1;
}

결과


여담

첫 번째 문제인 문자 개수 세기는 진짜 쉽게 해결할 수 있었는데 중간에 생각을 잘못해서 점점 꼬여버렸고 결국 되게 비효율적인 코드를 완성했다. 아무래도 실력 향상이 더 필요할 것 같다..