
코드1
오류1: 문자열은 Python에서 불변 객체(immutable)
croba=['c=','c-','dz=','d-','lj','nj','s=','z='] word=input() answer=0 for x in croba: if str(x) in word: word.replace(str(x),'') answer+=1 print(word) print(answer)
ljes=njak 3
croba=['c=','c-','dz=','d-','lj','nj','s=','z='] word=input() answer=0 for x in croba: if str(x) in word: print(str(x)) new_word=word.replace(str(x),'') answer+=1 print(new_word) print(answer)
lj nj s= ljenjak 3
croba=['c=','c-','dz=','d-','lj','nj','s=','z='] word=input() new_word=word answer=0 for x in croba: if str(x) in word: new_word=new_word.replace(str(x),'') answer+=1 answer+=len(new_word) print(answer)
예제 문제를 모두 통과하나 싶었지만 틀린 출력을 발견하였다.
오류2: 같은 문자 중복찾기 불가


입력 문자열에서 리스트 안에 있는 타겟단어만 찾다보니까 예제 입력4같은 상황에서 'c=' 하나만 더하는 에러가 발생하였다.
croba=['c=','c-','dz=','d-','lj','nj','s=','z='] word=input() new_word=word answer=0 for _ in range(len(word)): for target in croba: if str(target) in new_word: length = len(str(target)) word_list=list(new_word) for i in range(length): word_list[i]='' answer+=1 new_word=''.join(word_list).strip() answer+=len(new_word) print(answer)
croba 리스트에 있는 타겟 문자열을 찾으면 제거하는 플로우로 코딩해서 예제 문제는 모두 맞췄지만 틀렸다
이런상황이 진짜 에러 찾기 힘든 것 같다.
dz=dz= output: 3 (dz=, d, z=) answer: 2 (dz=, dz=)
질문게시판을 뒤지다가 반례를 찾았다.
너무 비효율적인 코드라고는 생각했는데 dz=과 z=를 제대로 찾으려면 검사하는 크로바티아 알파벳의 범위를 하나씩 늘려가며 찾아야겠다.
croba=['c=','c-','dz=','d-','lj','nj','s=','z='] croba_2=[] croba_3=[] for croba_alpha in croba: if len(croba_alpha)==2: croba_2.append(croba_alpha) if len(croba_alpha)==3: croba_3.append(croba_alpha) word=input() new_word=word answer=0 for _ in range(len(new_word)): for x in croba_3: if str(x) in new_word: length = len(str(x)) word_list=list(new_word) for i in range(length): word_list[i]='' answer+=1 # print(word_list) new_word=''.join(word_list).strip() # new_word=str(new_word) # print("new_word: ",new_word,"x: ",x) # print("answer: ",answer) for _ in range(len(new_word)): for y in croba_2: if str(y) in new_word: length = len(str(y)) word_list=list(new_word) for i in range(length): word_list[i]='' answer+=1 new_word=''.join(word_list).strip() # print("newword: ",new_word,"y: ",y) # print(new_word) answer+=len(new_word) print("answer:", answer)
여기까지 가다가.. 도저히 안될거같아서 코드 갈아엎기 start ㅠㅠㅜ
코드2
croba = ['c=', 'c-', 'z=', 'd-', 'lj', 'nj', 's=', 'dz='] word = input() answer = 0 i = 0 while i<len(word): flag=0 for alpha in croba: if word[i:i+len(alpha)]==alpha: answer+=1 flag=1 i+=len(alpha) break if flag==0: answer+=1 i+=1 print(answer)
결국 완전히 다른 방향으로 접근해서 풀었다.
저 코드에서도 break없이는 시간초과가 뜨는 걸 보니 어차피 원래 접근방식으로는 못 풀었을 것 같다
보다 효율적인 코드를 작성하는 법, 문자열에서 인덱스를 다루는 법을 더 공부해야겠다
'코딩 테스트 & 문제 해결 > 코딩 테스트 연습' 카테고리의 다른 글
[BOJ] [python] 14888: 연산자 끼워넣기 (1) | 2025.01.03 |
---|---|
[준랩] [python] 1082: 특정 대문자를 소문자로 바꾸기 (3) | 2024.12.24 |
Programmers -코딩테스트 연습>코딩 기초 트레이닝>수 조작하기 1 (1) | 2024.02.10 |
Programmers -코딩테스트 연습>코딩 기초 트레이닝>조건 문자열 (2) | 2024.02.05 |
programmers -코딩테스트 연습>코딩 기초 트레이닝 (1) | 2024.01.27 |