본문 바로가기

Computer Science&Engineering/코딩테스트

[정올 1516] 단어 세기

# 문제링크

jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=788&sca=2050

 

JUNGOL

 

www.jungol.co.kr

Beginner_Coder 에 문자열 종류 문제다. 문장을 입력받아서 문장에 나온 단어 갯수를 출력하는 문제. 

C언어 할 때와 달리 C++에는 string 형이 있어서 좀 더 편하게 구현할 수 있었던 거 같다. 문장을 단어로 나눌 때에는 strtok 을 사용했는데, 이거 사용법 좀 외워야겠다. Beginner_Coder 문제인데 삽질 좀 했다 ..

 

- main : 한 줄로 입력받기 cin.getline(buffer, maxsize), END 읽으면 종료- count_word : 문장을 단어로 나눠서 단어 수 세기- find_word : 이미 나온 단어인지 확인, 이미 나온 단어이면 해당 단어 인덱스를 리턴, 없는 단어면 -1 리턴- Output : 출력- remove_all : 다음 입력 처리를 위해 words 에 들어있던 거 다 지우기

 

# 제출 코드 

 

#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;

struct WORD {
    string str;
    int cnt;
};
vector<WORD> words;

int find_word(char * s) {
    for (int i = 0; i < words.size(); i++) {
        if (words[i].str == s) return i;
    }
    return -1;
}
void count_word(char * s) {
    const char* sep = " ";
    char* token = strtok(s, sep);
    while (token != NULL) {
        int idx = find_word(token);
        if (idx == -1) {
            WORD tmp;
            tmp.str = token;
            tmp.cnt = 1;
            words.push_back(tmp);
        }
        else words[idx].cnt++;

        token = strtok(NULL, sep);
    }
}
void Output() {
    for (int i = 0; i < words.size() ; i++) {
        cout << words[i].str << " : " << words[i].cnt << '\n';
    }
}
void remove_all() {
    int size = words.size();
    for (int i = 0; i < size; i++) {
        words.pop_back();
    }
}
bool compare(const WORD& a, const WORD& b) {
    return a.str < b.str;
}
int main(void)
{
    while (true) {
        char buffer[210];
        cin.getline(buffer, 210);
        if (strcmp(buffer, "END") == 0) break;

        count_word(buffer);

        sort(words.begin(), words.end(), compare);
        Output();

        remove_all();
    }

    return 0;
}

 

결과

 

반응형

'Computer Science&Engineering > 코딩테스트' 카테고리의 다른 글

[정올 2604] 그릇  (0) 2021.03.24
[정올 2514] 문자열 찾기  (0) 2021.03.24
[백준 2659] 십자카드 문제 C++ 풀이  (0) 2021.03.24
[백준 2309] 일곱 난쟁이  (0) 2021.03.22
[백준 11004] K번째 수  (0) 2021.03.20