본문 바로가기
프로그래머스 C++/Level.0

프로그래머스 C++ Level. 0 중복된 숫자 개수

by yeni_0224 2023. 3. 12.
728x90
반응형

정수가 담긴 배열 array와 정수 n이 매개변수로 주어질 때, array에 n이 몇 개 있는 지를 return 하도록 solution 함수를 완성해보세요.

#include <string>
#include <vector>

using namespace std;

int solution(vector<int> array, int n) {
    int answer = 0;
    //배열의 갯수를 센다
    for(int i = 0; i < array.size(); i++){
        //배열안에 n과 일치하는 수를 찾는다
        
        //n과 일치하는가
        if(n == array[i]){
            answer++;
        }        
    }
    return answer;
}

문제에서 궁극적으로 원하는 것은 n의 갯수이다. 그렇다면 answer에는 n의 갯수가 들어가야 한다. 갯수를 세어줄 때에는 반복문을 사용해야한다. 배열의 갯수만큼 반복해주어야하는데 그 이유는 금방 나온다. 차분히 읽어보자.

이전의 글에서 배열의 갯수는 배열의 인덱스 + 1 이라고 해주었는데 그렇다면 뭐 1을 더해야 한다거나 1을 빼야한다거나 하지 않냐는 의문이 들 수 있다. 

 

size() 함수는 갯수를 세어주는 기능을 하는 함수이다. 그래서 추가로 연산 해 줄 필요가 없다.

그렇다면 왜 반복문을 사용해주었나?

일단 i는 배열의 인덱스 번호를 위한 변수이다. 인덱스 번호를 1씩 더해주면서 이 값이 문제에서 요구하는 값과 일치하는지 반복 작업하며 확인해주기 위함이다. 반복문을 통해 갯수를 세어주는데, 그 갯수 세는 것에 "n과 일치하는가"조건을 달아주는 것이다. 이 조건과 일치하다면 if 문 안에 값이 들어올 것이고. answer의 값이 1 증가할 것이다. 1 증가하면 결과값이 리턴된다.

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

int solution(vector<int> array, int n) {
    int answer = 0;
    answer = count(array.begin(),array.end(),n);
    return answer;
}

이전에 사용했던 begin(), end() 함수를 사용하여 리턴해주는 방법을 사용할 수도 있고

#include <string>
#include <vector>

using namespace std;

int solution(vector<int> array, int n) {
    int answer = 0;
    int arr_len=array.size();
    for(int i=0;i<arr_len;i++)
    {
        if(array[i]==n)
            answer++;
    }
    return answer;
}

마지막에 코드를 채점할까 말까 고민했던 이유 중 하나가 뭔가 하나 더 작업해줘야될 것 같고, 뭔가 다시 리턴해줘야할거같은데 정확히 뭘 리턴해야되는거지? 등등 머릿속이 혼잡했었다.

아마 내가 생각했던 풀이법은 이게 아니었을까 생각한다. 방법에는 큰 차이가 없다. 배열의 사이즈를 받는 변수를 하나 더 만들어주었을 뿐.

 

삼항 연산자를 익숙하게 사용하시는 분들을 위해

삼항 연산자를 연습해야하는 나같은 분들을 위해 이런 풀이법도 들고왔다.

#include <string>
#include <vector>

using namespace std;

int solution(vector<int> array, int n) {
    int answer = 0;
    for (int a : array) {
        answer += a == n ? 1 : 0;
    }
    return answer;
}
#include <string>
#include <vector>

using namespace std;

int solution(vector<int> array, int n) {
    int answer = 0;
    for(auto i : array) if(i == n) answer++;
    return answer;
}

근데 진짜 for 안에 있는 : 연산 방법은 뭘까? 혹시나 이 글을 보시는 분이 있다면 댓글을... 키워드라도..

#include <bits/stdc++.h>
using namespace std;

int solution(vector<int> array, int n) {
    int ans = 0;
    for (int elem : array) if (n == elem) ans++;
    return ans;
}

이건 신기해서 가져왔다.

728x90
반응형