코드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: 특정 대문자를 소문자로 바꾸기 (2) | 2024.12.24 |
Programmers -코딩테스트 연습>코딩 기초 트레이닝>수 조작하기 1 (1) | 2024.02.10 |
Programmers -코딩테스트 연습>코딩 기초 트레이닝>조건 문자열 (2) | 2024.02.05 |
programmers -코딩테스트 연습>코딩 기초 트레이닝 (1) | 2024.01.27 |