-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[맵과 셋] 03월 14일 #2
base: main
Are you sure you want to change the base?
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
#include <iostream> | ||
#include <vector> | ||
#include <map> | ||
#include <algorithm> | ||
|
||
using namespace std; | ||
|
||
// 결과는 나오지만, 틀렸습니다!! | ||
|
||
int main() { | ||
//입력 | ||
//(1<= n <= 50,000) | ||
//(3<= filename <= 100) | ||
int n; | ||
cin >> n; | ||
|
||
map<string, int> file; | ||
vector<string> ext; | ||
|
||
//연산 | ||
//1. 확장자 분리하기 | ||
//2. 확장자 개수 세고 사전 순 정렬(오름차순) | ||
//3. 개수와 확장자명을 사전 순 출력 | ||
while(n--){ | ||
string file_name; | ||
cin >> file_name; | ||
|
||
//1. 확장자 분리하기 | ||
file_name.erase(0, file_name.find('.') + 1); | ||
ext.push_back(file_name); | ||
} | ||
|
||
//2. 확장자 정렬한 뒤 개수 세기 | ||
sort(ext.begin(), ext.end()); | ||
for(int i=0; i < ext.size(); i++) { | ||
cout << ext[i] << "\n"; | ||
} | ||
|
||
int cnt = 0; | ||
string tmp = ext[0]; | ||
|
||
for(int i=0; i < ext.size(); i++) { | ||
|
||
if (tmp == ext[i]){ | ||
cnt ++; | ||
} else { | ||
// 확장자가 다를 때, 그동안 셌던 cnt를 map에 넣음 | ||
file[ext[i-1]] = cnt; | ||
cnt = 1; | ||
tmp = ext[i]; | ||
} | ||
|
||
} | ||
//맨 마지막 넣기 | ||
file[tmp] = cnt; | ||
|
||
|
||
//3. 확장자 수와 이름을 사전 순 출력 | ||
map<string, int>::iterator iter; | ||
for(auto iter : file){ | ||
cout << iter.first << " " << iter.second << '\n'; | ||
} | ||
|
||
return 0; | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
#include <iostream> | ||
#include <unordered_set> | ||
#include <vector> | ||
|
||
using namespace std; | ||
|
||
//시간초과 | ||
|
||
Comment on lines
+6
to
+8
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 우선 unordered_set 을 사용해서 풀이해주신 건 아주 좋아요! 🥰 해당 문제의 경우에도 입력이 조금 많아보이네요. c++의 cin, cout은 c보다 느리다고 했었죠. 이때 입출력 속도 향상을 해 줄 수 있는 방법이 무엇이었죠? |
||
int main() | ||
{ | ||
//입력 (1<=N<=1,000,000, 1<=M<=1,000,000) | ||
int t, n, m, input; | ||
unordered_set<int> note; | ||
|
||
cin >> t; | ||
while (t--){ | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 테스트케이스마다의 수첩 내용이 누적되고 있네요! |
||
cin >> n; | ||
for (int i = 0; i < n; i++) | ||
{ | ||
cin >> input; | ||
note.insert(input); | ||
} | ||
cin >> m; | ||
for (int i = 0; i < m; i++) | ||
{ | ||
cin >> input; | ||
//탐색하면서 입력한 것과 같은 수가 나오면 1 아니면 0 | ||
if (note.find(input) != note.end()){ | ||
cout << "1\n"; | ||
} else { | ||
cout << "0\n"; | ||
} | ||
} | ||
} | ||
|
||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
#include <iostream> | ||
#include <vector> | ||
#include <map> | ||
#include <algorithm> | ||
|
||
using namespace std; | ||
|
||
int main() { | ||
//입력 (t <100, 0<=n<=30) | ||
int t, n; | ||
cin >> t; | ||
|
||
|
||
map <string, int> :: iterator iter; | ||
|
||
//연산 | ||
// 같은 종류의 의상은 하나만 있어야 한다. | ||
// 1. 종류 별로 count하고 경우의 수를 계산한다. | ||
// 2. 경우의 수는 0개, 1개, ..., n-1개, n개 이므로 (n+1) * (n+1) - 1(알몸)이다. | ||
|
||
while(t--){ | ||
cin >> n; | ||
map <string, int> clothes; // 기존 내용 삭제 | ||
while(n--){ | ||
string category, name; | ||
cin >> name >> category; | ||
|
||
//find 함수는 찾는 key가 없으면 end를 return한다. | ||
if (clothes.find(category) == clothes.end()) { | ||
clothes[category] = 1; | ||
} else { | ||
clothes[category]++; | ||
} | ||
} | ||
|
||
int sum = 1; | ||
for( auto iter : clothes){ | ||
sum *= (iter.second + 1) ; | ||
} | ||
|
||
sum -= 1; | ||
|
||
cout << sum << "\n" ; | ||
} | ||
|
||
|
||
|
||
return 0; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
사소한 실수가 있네요! 디버깅 시 사용한 코드를 확인해주세요 😉