본문 바로가기

CodingTest/Programmers

[ 프로그래머스 ] 문자열 내 마음대로 정렬하기

/  제출 1  /

 

'''
문제 인풋-아웃풋: n이 주어졌을 때, 인덱스 n기준으로 각 단어를 정렬
주요 예외: 
! 해당 인덱스 자리 문자가 같으면 
    ! 단어 전체가 사전순으로 앞선게 앞으로
    
# 1. string을 돌며, [해당 인덱스 자리 문자, 해당 단어] 원소를 리스트에 넣기
# 2. 1의 리스트를 [0]기준 정렬, [1]길이 기준 정렬
# 3. 2처리 끝난 리스트를 [0] 순서대로 뽑아 answer에 넣기
## strings: 100 * 50 이므로 O(n), O(nLogn), O(n) 무리 없다고 판단
'''

def solution(strings, n):
    answer = []
    
    charAndWordList = getCharWordList(strings, n);
    print(charAndWordList)
    sortedCharAndWordList = sorted(charAndWordList,
                                   key = lambda x:(x[0], x[1]))
    
    answer = makeAnswer(sortedCharAndWordList, answer)
    
    return answer

def getCharWordList(stringList, targetIndex):
    resultList = []
    for string in stringList:
        resultList.append((string[targetIndex],string))
    return resultList
        
def makeAnswer(sortedList, answer):
    for char, word in sortedList:
        answer.append(word)
    return answer
 
채점 결과
정확성: 100.0
합계: 100.0 / 100.0
 
 
레벨 1이라서 풀기 만만했던 것도 있고, 함수화해서 구조를 명확히 하니까 스스로 이해하기도 쉬웠습니다. 
 
간단한 메모 내용은 종이에 안 그리고 주석화해서 바로 코드에디터에서 정리해도 나쁘지 않은 것 같습니다.
 
코드 구성하면서 바로바로 아이디어 찾고 고치기에 용이한 것 같습니다. 대신 마지막에 필요없는거 정리해서 제출해야합니다.
 
물론, 종이에 그려가면서도 푸는 것이 좋습니다. 
 
코테 망치고 스트레스 받았는데, 가뿐하게 풀리는 문제 푸니까 조금 마음이 진정됩니다.
 
다시 천천히 반복하면서 실력 올려보겠습니다.