본문 바로가기
코딩테스트/programming_C++

baekjoon #1316_그룹 단어 체커_c++

by prometedor 2021. 10. 27.
  • 이중 for문 이용

  - 앞 뒤 문자 비교 && 해당 문자와 앞에서부터 해당 문자 전까지 비교

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

int main() {
  int N;
  string str;
  int cnt = 0;
  cin >> N;

  for (int i = 0; i < N; i++) {
    cin >> str;

    bool check = true;

    for (int j = 0; j < str.length(); j++) {
      for (int k = 0; k < j; k++) {
        if (str[j] != str[j - 1] && str[j] == str[k]) {
          check = false;
          break;
        }
      }
    }
    if (check) cnt++;
  }

  cout << cnt;

  return 0;
}

 

N => 입력 받을 단어 개수

str => 입력 받을 단어(문자열)

cnt => 그룹단어인 단어 개수

check => 그룹단어인지 체크(true or false)

 

ex)

2

happy

test

 

i = 0

str.length() = 5

 

j k if (str[j] != str[j - 1] && str[j] == str[k]) check
j = 0 k < 0
체크x

true
j = 1 k < 1 -> k = 0 str[1] != str[1 - 1] && str[1] == str[0]
a != h && a == h
1 && 0 -> false
true
j = 2 k < 2 -> k = 0 str[2] != str[2 - 1] && str[2] == str[0]
p != a && p == h
1 && 0 -> false
true
k < 2 -> k = 1 str[2] != str[2 - 1] && str[2] == str[1]
p != a && p == a
1 && 0 -> false
true
j = 3 k < 3 -> k = 0 str[3] != str[3 - 1] && str[3] == str[0]
p != p && p == h
0 && 0 -> false
true
k < 3 -> k = 1 str[3] != str[3 - 1] && str[3] == str[1]
p != p && p == a
0 && 0 -> false
true
k < 3 -> k = 2 str[3] != str[3 - 1] && str[3] == str[2]
p != p && p == p
0 && 1 -> false
true
j = 4 k < 4 -> k = 0 str[4] != str[4 - 1] && str[4] == str[0]
y != p && y == h
1 && 0 -> false
true
k < 4 -> k = 1 str[4] != str[4 - 1] && str[4] == str[1]
y != p && y == a
1 && 0 -> false
true
k < 4 -> k = 2 str[4] != str[4 - 1] && str[4] == str[2]
y != p && y == p
1 && 0 -> false
true
k < 4 -> k = 3 str[4] != str[4 - 1] && str[4] == str[3]
y != p && y == p
1 && 0 -> false
true

 

if(check) = if(true)  ->  cnt++  ->  cnt = 1


i = 1

str.length() = 4

 

j k if (str[j] != str[j - 1] && str[j] == str[k]) check
j = 0 k < 0
체크x

true
j = 1 k < 1 -> k = 0 str[1] != str[1 - 1] && str[1] == str[0]
e != t && e == t
1 && 0 -> false
true
j = 2 k < 2 -> k = 0 str[2] != str[2 - 1] && str[2] == str[0]
s != e && s == t
1 && 0 -> false
true
k < 2 -> k = 1 str[2] != str[2 - 1] && str[2] == str[1]
s != e && s == e
1 && 0 -> false
true
j = 3 k < 3 -> k = 0 str[3] != str[3 - 1] && str[3] == str[0]
t != s && t == t
1 && 1 -> true -> break; (반복 종료)
false
하나의 반복문을 빠져나감
하나의 반복문을 빠져나감

 
하나의 반복문을 빠져나감
하나의 반복문을 빠져나감
 

if(check) = if(false)


결국, cnt = 1 이 되고, 1이 출력됨

 

 

'코딩테스트 > programming_C++' 카테고리의 다른 글

baekjoon #2292_벌집_c++  (0) 2021.10.27
baekjoon #1712_손익분기점  (0) 2021.10.27
baekjoon #2941_크로아티아 알파벳_c++  (0) 2021.10.26
baekjoon #5622_다이얼_c++  (0) 2021.10.26
baekjoon #2908_상수_c++  (0) 2021.10.26