백준 단계별문제/문자열/ 파이썬 백준 2941 크로아티아 알파벳

suhyeon chae·2022년 1월 5일
0

블로그 쓰면서도 웃기지만.. 나한텐 기록용일 뿐인 이번코드..

백준에서 정답처리 된 코드지만.. 뜯어보면 반전이 있는 코드이다..

틀린 코드라고 생각함.. 하지만 백준에선 정답인.. 아마 예제는 다 통과돼서 그런게 아닐까...

https://www.acmicpc.net/problem/2941

문제 접근 방법

in 연산자를 사용하여 크로아티아 알파벳이 입력된 문자열에 포함되면 count해줌

array = input()
count = 0
Alpha = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']

        
for a in Alpha:
    if a in array:
        count += array.count(a)   # 만약에 리스트 Alpha에 있는 단어들이 입력된 array에 있다면 그 개수를 카운트 해줌. 그리고 count에 누적합 해줌
print(len(array)-count) # 입력받은 array의 전체 길이에서 count를 빼주면 됨 
  • for문과 in 연산자를 사용해서 ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z='] 각 단어들이 for문을 돌면서 array에 있는지 확인하고,

  • 있으면 몇개있는지 count함수를 사용하여 count값에 누적합을 해줌

  • 그 다음 단어 길이에서 그 count만큼 빼줌

왜 길이에서 빼줬니~?
: 길이라고 하면 array문자열의 개별 단어의 개수를 뜻하고, 그 단어중에서 크로아티아 알파벳 개수만큼 빼야 총 단어의 수라고 생각했음..

그럼 왜 틀린 풀이라고 생각했을까?
: 백준에선 정답처리 됐지만.. 만약 저 크로아티아 알파벳이 아닌 다른 알파벳이였다면 틀린풀이가 됐을 것이다.. 곰곰히 생각해보니까 길이에서 count값을 빼준다는게 완전 별로였다 ㅋㅎ 내 풀이에선 dz=dz=z=를 for문을 돌면서 중복체크를 하고 있어서 답은 나온거였다... 뜯어보면 틀린풀이이지만.. 접근 자체는 좋다고 생각했다... 틀린거겠죠..?

profile
예비 클라우드 & 백엔드 개발자 !

0개의 댓글