<답안>
#include <iostream>
using namespace std;
int main()
{
char input = ' ';
int count[4] = {0};
while(input != '\n')
{
cin.get(input);
//주기상 처음, w 입력
if(input == 'w')
{
count[0]++;
}
//종료 입력
else if(input == '\n')
{
//주기상 정상종료
if(count[0] == 0)
{
cout<<1;
return 0;
}
//주기상 비정상종료
else
{
cout<<0;
return 0;
}
}
//그 외 문자 입력
else
{
if(input == 'o')
{
count[1]++;
while(count[1] != count[0])
{
cin.get(input);
if(input != 'o')
{
cout<<0;
return 0;
}
count[1]++;
}
while(count[2] != count[0])
{
cin.get(input);
if(input != 'l')
{
cout<<0;
return 0;
}
count[2]++;
}
while(count[3] != count[0])
{
cin.get(input);
if(input != 'f')
{
cout<<0;
return 0;
}
count[3]++;
}
//정상적으로 반복이 종료된 경우
for(int i=0; i<4; i++)
count[i] = 0;
}
//이상한 문자 입력
else
{
cout<<0;
return 0;
}
}
}
return 0;
}
<설명>
문제이해가 안되어 접근조차 하지 못할정도로 어려운 문제는 아니였지만
꼼꼼하게 한번에 잘풀리지가 않아 난해를 겪었던 문제였다
가장 심플한 알고리즘으로, w를 계속 입력받으며 개수를 센 다음 (count[0])
다음으로 입력되는 o,l,f 개수가 같은지 여부를 확인하며 (count[1],[2],[3])
맞는경우 다시 w를 입력받을 준비를 하면 되는 식이다
이번엔 string형 대신 char형을 계속해서 입력받는 식으로 구현하였다
- 'w'가 입력됬을시는 count[0]을 증가
- '\n'가 입력됬을시
1. wolf가 정상적으로 다 돌아 count[0]이 0인 경우 -> 1 출력하며 정상종료
2. count[0]이 0이 아니여서 중간에 다른문자 또는 그냥 개행이 입력된 경우 -> 0 출력하며 비정상종료
- 그외 문자가 입력됬을시
- 입력문자가 'o'가 맞는경우
count[1]증가
count[1]이 count[0] 개수랑 같을때까지 반복하며 입력받는값이 'o'인지를 계속 비교한다
'o'이 아닌값이 입력된 경우 0 출력하며 비정상종료
count[2]이 count[0] 개수랑 같을때까지 반복하며 입력받는값이 'l'인지를 계속 비교한다
'l'이 아닌값이 입력된 경우 0 출력하며 비정상종료
count[3]이 count[0] 개수랑 같을때까지 반복하며 입력받는값이 'f'인지를 계속 비교한다
'f'이 아닌값이 입력된 경우 0 출력하며 비정상종료
이렇게 비교를 통해 계속 입력받아 온 경우 정상적인 반복입력이 종료된 경우이므로
count[0],[1],[2],[3]을 다시 0으로 초기화 해준다
- 입력문자가 'o'이 아닌경우
0을 출력하며 비정상종료
이러한 구조로 w개수를 기준으로 계속 비교를 통해 구현할 수 있다
'백준 > Inha Algorithm Study Group' 카테고리의 다른 글
DAY3 중급 - 백준 17287번 (C++) (0) | 2020.09.04 |
---|---|
DAY3 초급 - 백준 2828번 (C++) (0) | 2020.09.04 |
DAY2 중급 - 백준 13413번 (C++) (0) | 2020.09.04 |
DAY2 초급 - 백준 11718, 11719번 (C++) (0) | 2020.09.03 |
DAY1 고급 - 백준 9660번 (C++) (0) | 2020.09.02 |