코딩테스트/코딩테스트 Python

[CodeSignal] amendTheSentence (Python)

sseozytank 2022. 9. 5.

https://app.codesignal.com/interview-practice/task/yXDg4rAk9ooEjLjdj/description

 

amendTheSentence | CodeSignal

Press space bar to start a drag. When dragging you can use the arrow keys to move the item around and escape to cancel. Some screen readers may require you to be in focus mode or to use your pass through key

app.codesignal.com

 

✔️문제 요약 

- 문장에 띄어쓰기를 해주지 않았음 

- 대문자를 기준으로 띄어쓰기를 해주도록 하자. 

- 띄어쓰기가 끝나면, 모두 소문자로 돌려주기 

 

✔️풀이 방법 

1. 두번째 대문자부터 앞에 공백 추가해주기

 - [1:]이라는 조건 추가해주기

2.문자열 전체를 소문자로 바꿔주기 

 

-어떻게 풀어야할지 생각했다. 문자열이 하나로 되어있으면 isupper을 사용할 수 없다고 판단했고, 

문자열을 쪼개서 요소요소로 만든 후,  리스트 내부 [1:]를 검사하면서 isupper=True이면, 그 앞에 ' ' 공백 요소를 추가해주고 

이를 다시 하나로 합치고, 소문자로 바꿔주는 메커니즘을 생각하였고 이를 코드로 구현해보았다. 

def solution(s):
    res=list(s)
    for i in reversed(range(1, len(res))):
        element = res[i]
        if element.isupper() == True:       
            res.insert(i,' ')
        else:
            pass
    ans=(''.join(res).lower())
    return ans

 

✔️고찰

-인덱스로 i를 가져다 쓸 수 없어서 element라는 변수를 추가해줘서 거기에 res[i]를 담아주었다. 

-두번째 대문자부터 대문자란 조건을 만나면 공백을 추가해주고 싶었는데, 이 부분에서 공백을 추가해주면 인덱스가 하나씩 밀렸던 문제가 있었다. 이를 해결하기 위해 i+=1로 인덱스를 하나 밀어주고 싶었는데 어째서인지 적용이 되지 않아서 i를 뒤에서 부터 참조하는 reversed방식을 통해 문제를 해결할 수 있었다. i+=1은 더 알아보고 추가해놔야겠다. 

 

-피드백 : element는 한번만 쓰니까, 줄일 수 있을 것 같고 , else는 안써도 될 것 같다

-다른 사람 풀이 1 (dart) : 소문자로 변환한 리스트를 만들어 원래 리스트와 다르면 앞에 공백을 붙히고, 마지막에 trim을 써서 공백을 제거한다. 

-다른 사람 풀이 2 (dart) : 정규식 표현 사용 

-다른 사람 풀이 3 (dart) : 캐릭터형이 없어서 아스키코드 활용해서 풀이 

댓글