프로그래머스 풀이

프로그래머스 문제 풀이(2025.01.03)

lgbl 2025. 1. 3. 20:13
  • 서울에서 김서방 찾기
더보기

문제 : String형 배열 seoul의 element중 "Kim"의 위치 x를 찾아, "김서방은 x에 있다"는 String을 반환하는 함수, solution을 완성하세요. seoul에 "Kim"은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다.

 

 

제한사항

  • seoul은 길이 1 이상, 1000 이하인 배열입니다.
  • seoul의 원소는 길이 1 이상, 20 이하인 문자열입니다.
  • "Kim"은 반드시 seoul 안에 포함되어 있습니다.

 

#include <string>
#include <vector>
#include <algorithm>  //  auto it을 사용하기 위해 추가
using namespace std;

string solution(vector<string> seoul) {
    auto it = find(seoul.begin(), seoul.end(), "Kim");  //  seoul의 시작, 끝에서 Kim을 찾는다.
    int i = distance(seoul.begin(), it);  //  seoul 시작점부터 찾아낸 거리를 i라고 둔다.
    return "김서방은 " + to_string(i) + "에 있다"; 
}

 

  • 나누어 떨어지는 숫자 배열
더보기

문제 : array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요. divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.

 

제한사항

  • arr은 자연수를 담은 배열입니다.
  • 정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j] 입니다.
  • divisor는 자연수입니다.
  • array는 길이 1 이상인 배열입니다.

#include <string>
#include <vector>
#include <algorithm>  //  sort를 사용하기 위해 algorithm을 사용
using namespace std;
vector<int> solution(vector<int> arr, int divisor) {
    vector<int> answer;  //  벡터 선언
    sort(arr.begin(), arr.end());  //  배열을 오름차순으로 정렬
    for(int i = 0; i < arr.size(); i++){
        if(arr[i] % divisor == 0){  //  배열의 i번째가 짝수이면
            answer.push_back(arr[i]);  //  배열의 i번째에 추가
        }
    }
    if(answer.empty()){  //  답변이 비어있으면
        answer.push_back(-1);  //  -1을 출력
    }
    return answer;
}

 

  • 음양 더하기
더보기

문제 : 어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.

 

제한사항

  • absolutes의 길이는 1 이상 1,000 이하입니다.
  • absolutes의 모든 수는 각각 1 이상 1,000 이하입니다.
  • signs의 길이는 absolutes의 길이와 같습니다.
  • signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.

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

int solution(vector<int> absolutes, vector<bool> signs) {
    int answer = 0;  //  답변 선언
    for(int i = 0; i < absolutes.size(); i++){  //  정수 배열의 길이만큼 반복문 실행
        if (signs[i]){  //  i번째 signs이 참일 때
            answer += absolutes[i];  //  답변에 i번째 정수를 더함
        }
        else {answer -= absolutes[i];}  //  그렇지 않다면 (거짓) i번째 정수를 뺌
    }
    return answer;
}

 

  • 핸드폰 번호 가리기
더보기

문제 : 프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.

 

제한사항

  • phone_number는 길이 4 이상, 20이하인 문자열입니다.

#include <string>
#include <vector>

using namespace std;

string solution(string phone_number) {
    string answer = phone_number; 
    for (int i = 0; i < phone_number.size() - 4; i++){  //  휴대폰 번호 길이 - 4만큼 반복
        answer[i] = '*';  //  i가 반복된 횟수만큼 앞자리를 *로 치환
    }
    return answer;
}