Python/알고리즘 문제 풀이

[코테] 문자열 정렬하기(2)

마이구미+ 2023. 4. 12. 15:21

<로직 고민>

  • 음.. for문을 돌려서 하나씩 lower()로 변환시켜서 붙여주고
  • 정렬시키려면 리스트로 바꿔야겠네...
  • 리스트로 바꿔서 정렬하고 ''.join()으로 리턴하면 될 듯
def solution(my_string):
    answer = ''
    for st in my_string:
        answer += st.lower()
    list_answer = list(answer).sort()
    return ''.join(list_answer)
  • 흠..이렇게 하니까 오류 뜨네
  • TypeError: can only join an iterable
  • list_answer가 문제인 것 같아 프린트해봤다
  • None이 나오는군....
  • sort()는 변수에 넣는 게 아니라 그냥 그 자체를 정렬하는 거라 그런가?
def solution(my_string):
    answer = ''
    for st in my_string:
        answer += st.lower()
    list_answer = list(answer)
    list_answer.sort()

    return print(list_answer)
    
print(solution("Bcad"))
print(solution("heLLo"))
print(solution("Python"))
  • 이렇게 하고 찍어보니
['a', 'b', 'c', 'd']
None
['e', 'h', 'l', 'l', 'o']
None
['h', 'n', 'o', 'p', 't', 'y']
None
  • 이렇게 나온다...흠....쨌든 정렬은 됐군 이제 join하면 될 듯
def solution(my_string):
    answer = ''
    for st in my_string:
        answer += st.lower()
    list_answer = list(answer)
    list_answer.sort()

    return ''.join(list_answer)


print(solution("Bcad"))
print(solution("heLLo"))
print(solution("Python"))

# 출력화면
# abcd
# ehllo
# hnopty
  • 오 완성
  • 근데 뭔가 코드를 줄이고 싶은걸
def solution(my_string):
    answer = ''
    for st in my_string:
        answer += st.lower()
    list(answer).sort()
    return ''.join(list(answer))
  • 이게 최선인 듯 근데 시간복잡도가 크게 차이나지 않으니 무의미한 수정인 거 같기도 하고 ㅋㅋ
  • sorted() 쓰려면 이렇게도 되고
def solution(my_string):
    answer = ''
    for st in my_string:
        answer += st.lower()
    list_answer = sorted(list(answer))
    return ''.join(list_answer)
  • 전자가 맘에 든다!
  • 엥 근데 답안지에 넣어보니 위에 코드는 실패고 아래 코드는 성공이다 왜지..?
  • vscode에서 돌리면 둘 다 값이 제대로 나오는데 뭐징...

<완성된 코드>

def solution(my_string):
    answer = ''
    for st in my_string:
        answer += st.lower()
    list_answer = sorted(list(answer))
    return ''.join(list_answer)


print(solution("Bcad"))
print(solution("heLLo"))
print(solution("Python"))

# 출력화면
# bcad
# hello
# python

<다른 사람 풀이>

- 천재풀이1

def solution(my_string):
    return ''.join(sorted(my_string.lower()))
  • for문 돌릴 필요도 없구나......ㅋㅋㅋㅇㅋ.....

- 천재풀이2

def solution(my_string):
    answer = []
    for i in my_string:
        if ord(i) >= ord('A') and ord(i) <= ord('Z'):
            answer.append(chr(ord(i)+32))
        else:
            answer.append(i)
    return ''.join(sorted(answer))
  • 이 풀이는 댓글이 인상깊다

  • 여기 가져오긴 귀찮지만 다들 쉽게들 잘 풀었다 ...