본문 바로가기

ALGORITHM/OTHER

[c++] 20291 파일정리 (map사용)

https://www.acmicpc.net/problem/20291

 

20291번: 파일 정리

친구로부터 노트북을 중고로 산 스브러스는 노트북을 켜자마자 경악할 수밖에 없었다. 바탕화면에 온갖 파일들이 정리도 안 된 채 가득했기 때문이다. 그리고 화면의 구석에서 친구의 메시지를

www.acmicpc.net

 

string 함수의 find() 와 substr() 함수를 사용하였습니다.

counting은 map을 사용하였는데 <정렬 + 중복 count 가능> 으로 한줄로 해결가능 할 것 같아서 map을 사용하였습니다.

 

근데 key값에 접근하는 방법을 까먹어서 다시 검색검색,, 

 

첫번째 방법 : iterator로 선언해서 for문 돌려주면 됩니당.

for (map<string, int>::iterator iter = ex.begin(); iter != ex.end(); iter++) {
	cout << iter->first << " " << iter.second << "\n";
}

 

두번째 방법: auto 사용해서 그냥 돌려줍니다.

for (auto iter: ex) {
    cout << iter.first << " " << iter.second << "\n";
}

 

주의할 점은 iterator는 ->로 접근,  auto로 접근할 때는 . 으로 first, second에 접근하면 됩니당//

 

#include <iostream>
#include <string>
#include <vector>
#include <map>
using namespace std;

vector<string> fileNames;
map<string, int> ex;

int main(int argc, const char * argv[]) {
    
    int N;
    cin >> N;
    for (int i=0; i<N; i++) {
        string file;
        cin >> file;
        int dot = (int)file.find('.');
        ex[file.substr(dot+1)]++;
    }

    for (map<string, int>::iterator iter = ex.begin(); iter != ex.end(); iter++) {
        cout << iter->first << " " << iter->second << "\n";
    }
    
    return 0;
}