[알고리즘]프로그래머스 0529

정제철·2023년 5월 29일
0

알고리즘

목록 보기
6/12
post-thumbnail

📢1. 내적

  • 문제 설명 (월간 코드 챌린지 시즌1)
    길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요.

이때, a와 b의 내적은 a[0]b[0] + a[1]b[1] + ... + a[n-1]*b[n-1] 입니다. (n은 a, b의 길이)

  • 제한사항
    a, b의 길이는 1 이상 1,000 이하입니다.
    a, b의 모든 수는 -1,000 이상 1,000 이하입니다.
  • 입출력 예
    a b result
    [1,2,3,4][-3,-1,0,2] 3
    [-1,0,1][1,0,-1] -2

✍내풀이

#include <string>
#include <vector>

using namespace std;

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

📢2. 가운데 글자 가져오기

  • 문제 설명 (Lv.1)
    단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.

  • 제한사항
    s는 길이가 1 이상, 100이하인 스트링입니다.

  • 입출력 예
    s return
    "abcde" "c"
    "qwer" "we"

✍내풀이

#include <string>
#include <vector>

using namespace std;

string solution(string s) {
    string answer = "";
    if(s.size()==2) return s;
    int x =s.size()/2;
    s.size()%2==0 ? answer = s.substr(x-1, 2) : answer=s.substr(x, 1);

    return answer;
}

s.size()%2!=0 -> s.length()&1 로 사용했다면 비트연산자를 사용해서 더 간결하게 표현가능 했을 것이다.

✂배울점

return s.length()&1 ? s.substr(s.length()*0.5,1) : s.substr(s.length()*0.5-1,2);

📍substr()

string **substr** (size_t pos, size_t len)
  • pos: 추출을 시작할 위치를 나타내는 인덱스입니다.
  • len: 추출할 문자열의 길이를 나타냅니다.

📢3. 서울에서 김서방 찾기

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

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

  • 입출력 예


seoul | return
["Jane", "Kim"] | "김서방은 1에 있다"


✍내풀이

#include <string>
#include <vector>

using namespace std;

string solution(vector<string> seoul) {
    string answer = "";
    for(int i =0; i<seoul.size();i++)
    {
        if(seoul.at(i)=="Kim") answer="김서방은 " + to_string(i) + "에 있다";
    }
    return answer;
}

📍to_string()

to_string(i)를 사용하여 문자열화 시켜줘야한다.

📢4. 제일 작은 수 제거하기

문제 설명(Lv.1)
정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.

제한 조건
arr은 길이 1 이상인 배열입니다.
인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다.
입출력 예
arr return
[4,3,2,1][4,3,2]
[10][-1]

✍내풀이

#include <vector>
#include <algorithm>

using namespace std;

vector<int> solution(vector<int> arr) {
    vector<int> answer;
    int a = arr.at(0);
    for(int i = 0 ; i < arr.size() ; i++) if(a>arr[i]) a=arr[i]; 
    arr.erase(remove(arr.begin(),arr.end(),a),arr.end());  
    if(arr.empty()) return {-1};
    return arr;
}

📍erase(), remove(), return {i}

  • erase -> x.erase()
  • remove -> reomve()이다. = sort()
    -' vector solution(vector arr)' 반환값이 벡터일경우 return을 '{}'형식으로 반환해줘야한다.
profile
성공의 반대는 실패가 아닌 도전하지 않는 것이다.

0개의 댓글