본문 바로가기

알고리즘

프로그래머스)[3차] 파일명 정렬

https://school.programmers.co.kr/learn/courses/30/lessons/17686#

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

import re

def solution(files):
    answer = []
    dic={}
    for i in files:
        a = re.split(r"([0-9]+)", i)
        dic[i] = a
        
        # a = re.findall(r'\d+|\D+', i)
        # for j in range(len(a)):
        #     a[j] = a[j].replace(" ","")
        #     a[j] = a[j].replace(',','')
        #     a[j] = a[j].replace('-','')
        #     a[j] = a[j].replace('.','')
        #     a[j] = a[j].lower()
        # dic[i] = a
        
    # for i in files:
    #     a = ''
    #     for j in i:
    #         if j.isalpha():
    #             a += j.lower()
    #         else:
    #             a += j
    #     a = a.replace('-','')
    #     a = a.replace(' ','')
    #     a = a.replace(',','')
    #     a = re.findall(r'\d+|\D+', a)
    #     dic[i] = a
    
    
        
    sorted_keys = sorted(dic, key=lambda x: (dic[x][0].lower(), int(dic[x][1])))
    answer = [key for key in sorted_keys]
    return answer

엄청난 노력의 흔적들...

이 문제를 한마디로 요약하자면,

정규식을 쓸 줄 알면 쉽게 풀리고 쓸 줄 모른다면 어렵게 느껴지는 문제다.

정규식을 잘은 못쓰지만 어떻게 어떻게 검색해서 풀어봤다.

주석처리 한 코드가 처음 제출한 코드였다.

하지만 6 7. 8 9번에서 실패가 나왔고 질문하기를 통해도 도저히 6 7. 8 9번을 통과하지 못했다..

결국 검색을 통해 정답을 확인했고 필터 부분의 코드만 교체했다.

정말... 문제 자체는 어렵지 않았지만 정규식 때문에라도 2.5레벨이라 느껴졌다.

 

+++

주석처리한 부분

즉 내가 처음 제출한 코드에서 모든 특수문자를 replace('특수문자','')한 것이 문제였다.

ㅠㅠ

 

import re

def solution(files):
    answer = []
    dic={}
    for i in files:
        # a = re.split(r"([0-9]+)", i)
        # dic[i] = a
        
        a = re.findall(r'\d+|\D+', i)
        for j in range(len(a)):
            
            a[j] = a[j].lower()
        dic[i] = a
        
    # for i in files:
    #     a = ''
    #     for j in i:
    #         if j.isalpha():
    #             a += j.lower()
    #         else:
    #             a += j
    #     a = a.replace('-','')
    #     a = a.replace(' ','')
    #     a = a.replace(',','')
    #     a = re.findall(r'\d+|\D+', a)
    #     dic[i] = a
    
    
        
    sorted_keys = sorted(dic, key=lambda x: (dic[x][0].lower(), int(dic[x][1])))
    answer = [key for key in sorted_keys]
    return answer

특수문자를 제거하는 코드만 제거하니 무난하게 통과했다...

문제 설명좀 자세히 해주지...!