두 배열이 얼마나 유사한지 확인해보려고 합니다. 문자열 배열 s1과 s2가 주어질 때 같은 원소의 개수를 return하도록 solution 함수를 완성해주세요.
#include <string>
#include <vector>
using namespace std;
int solution(vector<string> s1, vector<string> s2) {
int answer = 0;
vector<string> a = s1.size() <= s2.size() ? s1 : s2;
for(int i = 0; i < a.size(); i++){
s1[i] == s2[i] ? answer++ : return;
}
return answer;
}
처음에 작성했던 식이다.
요즘 삼항연산자식을 사용하는 것이 매우 흥미로워서 이번엔 이렇게 작성해보았다. 하지만 답은 틀렸다. 틀릴만 하다. 사실 이중 for문을 사용하는 것을 지양해보고자 했다. 그 이유는 정말 별거없다. 예전에 프로그래머스 풀 때 이중 for문을 사용했다가 연산 갯수?가 너무 많아 통과되지 못했다는 글을 봤기 때문이다. 어차피 이중 for문 써도 안될텐데 다른 방법을 생각해봐야겠다. 라고 생각했지만 크나 큰 오산이었다. 나의 코딩 공부를 도와주시는 요정님께서 힌트로 이중for문을 말씀하셨기 때문이다. 허허허허..
이중for문을 고민하며 적었던 식을 싹 머릿속에서 지우고 처음부터 다시 생각해주었다.
1. s1 원소 하나와 s2의 원소 하나를 s2의 갯수만큼 비교해준다
2. 이 행위를 s1 원소 갯수만큼 반복해준다
생각해보니 두 배열의 사이즈를 비교하는 변수를 만들었던 이유는 이중for문을 쓰지 않게 하기 위함이었기 때문에 필요가 없어져서 지웠다. 역시 글로 직접 적으면서 정리해주니까 조금씩 문제가 풀린다.
#include <string>
#include <vector>
using namespace std;
int solution(vector<string> s1, vector<string> s2) {
int answer = 0;
for(int i = 0; i < s1.size(); i++){
for(int j = 0; j < s2.size(); j++){
if(s1[i] == s2[j]){
answer++;
}
}
}
return answer;
}
다른 사람들의 풀이도 봐보자
#include <string>
#include <vector>
#include <set>
using namespace std;
int solution(vector<string> s1, vector<string> s2) {
int answer = 0;
set<string> s3(s1.begin(), s1.end());
for(int i = 0; i < s2.size(); i ++)
{
if(s3.find(s2[i])!=s3.end())
{
answer++;
}
}
return answer;
}
find 함수라는 것도 있나보다 세상에
#include <string>
#include <vector>
using namespace std;
int solution(vector<string> s1, vector<string> s2) {
int answer = 0;
for(const auto v : s1)
{
for(const auto v2 : s2)
{
if( v==v2)
{
answer++;
}
}
}
return answer;
}
저 : 연산자에 적응하는거 노력해야겠다. 이렇게 간단해질수가..
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<string> s1, vector<string> s2) {
int answer = 0;
for (auto i : s1)
if (find(s2.begin(), s2.end(), i) != s2.end())
answer++;
return answer;
역시 활용하기 나름이다. find 함수에 begin, end 함수까지 같이 사용해주면서...쓰니까 이렇게 단순할수가..
역시 늦게 코딩공부를 시작한 만큼 알아가야할게 태산이다.
#include <string>
#include <vector>
#include <map>
using namespace std;
int solution(vector<string> s1, vector<string> s2)
{
int answer=0;
map<string,int> m;
for(string e : s1) m[e]++;
for(string e : s2) m[e]++;
map<string,int>::iterator it;
for(it=m.begin(); it!=m.end(); it++)
if((*it).second==2) answer++;
return answer;
}
이 답안은 너무너무 깔끔한것같다. 진짜 잘하면 식 길이가 그렇게 길지도 않고
한줄 한줄 딱 깔끔하게 정리된다고 했다.
참 to the 고
#include <string>
#include <vector>
using namespace std;
int solution(vector<string> s1, vector<string> s2) {
int answer = 0;
for(auto c : s1) for(auto s : s2) c == s ? answer++ : 0;
return answer;
}
키야..... 깔 끔하다
이렇게 감탄하며 이번 포스트 마무리
노션으로 언리얼엔진 공부 내용을 정리하고 있는데
옮기려면 정말 오랜 시간이 걸릴 것 같다...
세상에나..
T스토리의 치명적인? 단점? 사실 내가 검색을 해봐야겠지만
노션처럼 바로바로 단축키 사용해서 코드블럭 생성할 수 있지가 않더라. 현재 내가 알고 있는 범위 내에선.
꼭 단축키가 있길 바라며... 검색해서 알아내고만다...
'프로그래머스 C++ > Level.0' 카테고리의 다른 글
프로그래머스 C++ Level. 0 특정 문자 제거하기 (0) | 2023.04.12 |
---|---|
프로그래머스 C++ Level. 0 삼각형의 완성조건(1) (0) | 2023.04.11 |
프로그래머스 C++ Level. 0 최댓값 만들기(1) (0) | 2023.04.03 |
프로그래머스 C++ Level. 0 배열 원소의 길이 (0) | 2023.03.24 |
프로그래머스 C++ Level. 0 머쓱이보다 키 큰사람 (0) | 2023.03.22 |