본문 바로가기
Learning-log/Algorithm 문풀

백준(파이썬, python) - 1316번(2022.10.31)

by why제곱 2022. 10. 31.

1. 1316번

 

1) 문제

 

2) 풀이

 

3) 문법 및 풀이과정

이 문제 풀이의 아이디어는 각 알파벳을 확인할 때마다, 첫째, 앞에 그 알파벳이 있었는지 확인할 것(중복인지)과 둘째, 중복이라면 바로 직전이 그 알파벳이었는지 확인하는 두가지를 해야겠다는 생각에서부터 나왔다. 

고려해야할 요소가 꽤 여러가지니 번호를 매겨 순차적으로 살펴보겠다.

 

(1) import sys 후 첫번째 입력값을 받는다. sys를 사용한 이유는 이게 시간제한에 더 효율적인 방법이기 때문이다. 

(2) case의 값만큼 for문을 반복하여 word를 입력값으로 받고 이제 각각 알파벳을 하나씩 확인하여 alph_list에 append할 것이므로 alph_list도 정의해둔다.

(3) for문을 한 번 더 사용하고 if도 사용하여 이번에는 word 의 각 자리를 확인한다. 만약 만들어둔 list에 그 알파벳이 없다면 append(중복이 아니므로) 하고 아니라면 현재 list의 마지막 index 자리에 위치한 알파벳이 현재 고려 중인 알파벳과 같은지 확인한다. 같다면 다시 append를 하면 되고, 아니라면 break를 하는데 그 전에 opp_cnt에 1을 더해준다.

+ 이 때, break를 하지 않고 계속 for문을 이어 나가면 그 후에 나오는 알파벳 중 그룹 단어가 아닌 조건에 부합하는 문자열이 재 등장하면 같은 문자열을 중복해서 세는 오류가 발생할 수 있다. 

(6) opp_cnt는 그룹단어가 아닌 수를 세는 것이 되므로 전체 case 수에 opp_cnt를 빼서 그룹 단어의 개수를 최종적으로 출력한다.