import re
def solution(files):
    answer = []
    for filename in files:
        splittedlist  =re.split(r"([0-9]+)", filename, maxsplit=1)
        answer.append(splittedlist)
    sortlist = sorted(answer, key= lambda e : (e[0].lower(),int(e[1])))
    return list("".join(i) for i in sortlist)

위의 디버깅을 봐보자. 숫자를 기준으로 List안에 있는 문자열을 자르고 있고, 잘리는 숫자도 남아있다. 이 작업을 정규표현식을 쓰지 않고 한다면 엄청난 수작업과 노력이 들 것이다.

이렇게 강력한 정규표현식을 정리하려고 한다.

 

 

 

반응형

url : https://programmers.co.kr/learn/courses/30/lessons/43238

 

프로그래머스

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

programmers.co.kr

프로그래머스 문제를 풀다보니 2차원 배열의 회전 함수를 알아야 할 필요성을 느꼈다.

이에 정리할 필요성을 느껴 회전 각도에 따라 정리한다.

 

90도 회전

def rotate_90(m):
	N = len(m)
    ret = [[0] * N for _ in range(N)]
    for r in range(N):
    	for c in range(N):
        	ret[c][N-1-r] = m[r][c]
    
    return ret

 

180도 회전

def rotate_180(m):
	N = len(m)
    ret = [[0] * N for _ in range(N)]
    
    for r in range(N):
    	for c in range(N):
        	ret[N-1-r][N-1-c] = m[r][c]
    
    return ret

 

270도 회전

def rotate_270(m)
	N = len(m)
    ret = [[0] * N for _ in range(N)]
    
    for r in range(N):
    	for c in range(N):
        	ret[N-1-c][r] = m[r][c]
    
    return ret
반응형

파이썬 프로그램을 짜다가 사용자가 프로그램의 진행상황을 궁금할 수 있다는 생각이 들었습니다.

1년의 Data를 통계내고 있는 프로그램을 짜고 있는데, 1일 데이터의 행의 수가 6000개 정도 되고, 1년이면 대략 2,190,000행 5열 정도의 데이터를 처리합니다. SQL 쿼리문이 1일에 대략 1초니까 1년의 쿼리문이 진행된다고 했을때, 365초입니다.

따라서 파이썬 .exe(실행파일)을 사용자가 실행했을 때, 5~6분을 기다리는데, 그 때 프로그램이 진행되는건지 멈춘건지 알 수 없기 때문에, 진행상황을 알 수 있는 Progress bar가 필요합니다.

아래는 프로그레스 바의 Sample 코드입니다.‬

import sys

def printProgress (iteration, total, prefix = '', suffix = '', decimals = 1, barLength = 100):
    formatStr = "{0:." + str(decimals) + "f}"
    percent = formatStr.format(100 * (iteration / float(total)))
    filledLength = int(round(barLength * iteration / float(total)))
    bar = '#' * filledLength + '-' * (barLength - filledLength)
    sys.stdout.write('\r%s |%s| %s%s %s' % (prefix, bar, percent, '%', suffix)),
    if iteration == total:
        sys.stdout.write('\n')
    sys.stdout.flush()
    
for i in range(0, 100):
  printProgress(i, 100, 'Progress:', 'Complete', 1, 50)

printProgress라는 함수에를 만들었고, for문에서 i가 0부터 100까지 늘어나면서 Progress bar가 올라가는 알고리즘으로 되어 있습니다.

 

이 글을 보시는 분들은 for문에서 enumerate를 사용하셔서 index를 i 대신 적용하시면 for문이 돌때마다 index가 올라갈 것이고, 진행상황을 알 수 있는 bar가 Print될 것입니다.

 

감사합니다.

반응형

+ Recent posts