정수가 담긴 배열 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;
}
이건 신기해서 가져왔다.
'프로그래머스 C++ > Level.0' 카테고리의 다른 글
프로그래머스 C++ Level. 0 옷가게 할인받기 (0) | 2023.03.16 |
---|---|
프로그래머스 C++ Level. 0 아이스 아메리카노 (0) | 2023.03.13 |
프로그래머스 C++ Level. 0 점의 위치 구하기 (0) | 2023.03.11 |
프로그래머스 C++ Level. 0 배열 두 배 만들기 (0) | 2023.03.09 |
프로그래머스 C++ Level. 0 문자열 뒤집기 (0) | 2023.03.08 |