flag 를 두어서 끝나면 1로 설정하도록 하나요? 어떻게 하나요? 보세요 aa bb cc dd a 이렇게 받았다고 가정을 하빈다. 그럼 알파벳 어레이에서 숫자를 샌다고 가정을 합니다. 연속된 숫자를 기록한다음에 다시 a 를 확인합니다. 그런데 flag 가 1로 되어 있습니다. 그럼 이것은 연속된 알파벳이 아님을 감지합니다. 오케이 그럼 이 플래그를 1로 만들기 위해서는 어떻게 해야하나요? 먼저 a 를 입력 받고 flag = 0 입니다. 아이와 아이+1 을 비교합니다. 그래서 다르면 i 의 flag 를 1로 처리합니다. 오케이요. 그럼 가장 마지막에 있는 d 의 경우는 어떻게 처리하나요? 예를 들어 aa bb cc dd 가 들어왔다고 가정을 합니다. 그럼 flag 의 경우 1 1 1 로 닫히고 마지막 d는 그다음 뒤와 비교를 해야하는데? 그 다음 인덱스가 존재하지 않습니다. 마지막인지 아닌지 체크를 하도록 합니다. 오케이 마지막인지 아닌지 체크하는 것도 하나 넣어주도록 합니다. a b c d e f 2 2 2 2 1 1 1 1 렝스 마지막의 것은 어떻게 체크를 할 것인지 생각을 해보도록 하겠습니다. 엄엄.... 마지막 것은 어떻게 처리를 해야하지???
|
/* 간던 곳인지만 체크하도록 합니다. 연속적으로 나온 것은 괜찮습니다. 이렇게 표시하도록 합니다. 일단 하나만 받아서 해보도로 하겠습니다. aabbccdda 이것을 받아보도록 하겠습니다. a b c d t t t t 4개가 나오면 됩니다. true 갯수를 세면 됩니다. 그런데 aaaaabbccdd 이렇게 나오는 거랑 aabbccdd 랑 나오는 거랑 동일하니, a 가 나오면 이것이 다른 숫자가 나올 때까지 다른 것들은 변합없이 인덱스만 올라가도록 합니다. aaaa bb cc dd a 라고 가정을 해보도록 하겠습니다. 먼저 아이가 0 이고 아이 1과 동일한가요 에스 그럼 아이하나를 올려서 아이 1과 아이 2가 동일 한가요 에스 그럼 아이는 2가 됩니다. 아이 2와 3은 동일한가요 예스 그럼 아이는 3이됩니다. 아이 3 과 4는 동일한가요? 아니요 그럼 들어가지 않고 밖으로 나갑니다. 그럼 아이는 여기서 3에서 2로 하고 다시 +1 해서 3으로 들어가게 됩니다. 아니 4로 들어가게 됩니다. */ #include <iostream> #include <string> using namespace std; int N; string word; bool check[26] = { false }; int index = 0; int ans = 0; void problem_in() { cin >> word; for (int i = 0; i < 26; i++) { check[i] = false; } } // aabbccdd a // 01234567 이므로, /* 0 과 1이 동일하므로 아이는 1이 됩니다. 그리고 1과 2는 다르므로 와일문에서 벗어나고 아이는 2가 됩니다. 오케이요. 이게 그룹 단어인지 아닌지 어떻게 압니까? 문제를 잘 못 인식 했네요. 아하. 그럼 트루인곳을 다시 방문하려고 할때 이것은 아니다라고 표시하면 됩니다. 아니다 표시가 아니라 카운트에 세지 않으면 됩니다. 그럼 단순하게 aa bb cc dd a 인데 하나씩 방문하면서 어디에 카운트를 넣으면 되나요? aa bb cc dd a 를 하고 나서, 인덱스를 하고, */ void solve() { int cnt = 0; for (int i = 0; i < word.length(); i++) {
index = word[i] - 'a'; if (check[index] == false) { check[index] = true; while (word[i] == word[i + 1]) { i++; } } else { ans--; break; } } } int main(void) { cin >> N; ans = N; for (int i = 0; i < N; i++) { problem_in(); solve(); } cout << ans << endl; return 0; } |
문제를 잘 읽어야 할 필요성을 느꼈습니다. 그리고 지난간 것에 대해서는 bool 타입을 사용해서 false 처리를 하면 되고, 문제를 돌려서 풀 필요없이, 생각한 풀이 그대로 풀어내면 됩니다. 이프문 넣어서 false 처리한 것과 while 문 넣어서 처리한 것은 아주 잘 한것이라 생각됩니다. |