STUDY/Python

프로그래머스 문제풀이 (lv.1~2) 정규표현식, 스택 큐

둥둥런 2022. 12. 9. 21:37

1209 TIL 코딩 테스트 연습

멘토님 선별 문제, 별은 난이도

코딩테스트 연습으로 lv.0을 계속 풀다가 윗단계를 도전하니

확실히 시간도 오래걸리고 어려웠지만, 수업시간에 배웠던 스택과 큐를 직접 사용해보니까 재밌었다.

 

두 정수 사이의 합🌟
(https://school.programmers.co.kr/learn/courses/30/lessons/12912)

def solution(a, b):
    answer = 0
    number = [a,b]
    number.sort()
    for i in range(number[0],number[1]+1):
        answer += i
    return answer

 

문자열 내 p와 y의 개수🌟
(https://school.programmers.co.kr/learn/courses/30/lessons/12916)

def solution(s):
    s = s.lower()
    p = s.count("p")
    y = s.count("y")
    if p == 0 and y == 0:
        return True
    
    else:
        return True if p == y else False

 

나머지가 1이 되는 수 찾기🌟
(https://school.programmers.co.kr/learn/courses/30/lessons/87389)

def solution(n):
    a = []
    for x in range(1, n):
        if n % x == 1:
            a.append(x)

    return a[0]

 

부족한 금액 계산하기🌟
(https://school.programmers.co.kr/learn/courses/30/lessons/82612)

def solution(price, money, count):
    expect=0
    i = 1
    for i in range(count+1):
        expect += price * i
    
    answer = expect - money
    
    #돈이 모자라지 않으면 0
    if answer < 0:
        return 0
    
    return answer

 

신규 아이디 추천 (정규표현식)🌟🌟
(https://school.programmers.co.kr/learn/courses/30/lessons/72410)

정규표현식 참고블로그
.이 모든 문자라는 뜻이 있어서 [.] 이렇게 써줘야 "." 진짜 점을 의미한다.
^a는 a로 시작, a$는 a로 끝나는 것, | 는 or ( and는 &)
https://nachwon.github.io/regular-expressions/
import re
def solution(new_id):
    new_id = new_id.lower()
    new_id = re.sub('[^0-9a-z-_.]','',new_id)
    
    # 3단계 
    while new_id.count("..") > 0:
        new_id = new_id.replace("..",".")
        
    # 4단계 
    new_id = re.sub('^[.]|[.]$', '', new_id)
    
    # 5단계 
    new_id = 'a' if len(new_id) == 0 else new_id 
    
    # 6단계 ***
    if len(new_id) >= 16:
        new_id = new_id[:15]
        new_id = re.sub('[.]$', '', new_id)
        
    # 7단계 
    elif len(new_id) <= 2:
        new_id = new_id + (new_id[-1] * (3 - len(new_id)))
        
    return new_id
# 다른 사람의 풀이 참고해보기
import re

def solution(new_id):
    st = new_id
    st = st.lower()
    st = re.sub('[^a-z0-9\-_.]', '', st)
    st = re.sub('\.+', '.', st)
    st = re.sub('^[.]|[.]$', '', st)
    st = 'a' if len(st) == 0 else st[:15]
    st = re.sub('^[.]|[.]$', '', st)
    st = st if len(st) > 2 else st + "".join([st[-1] for i in range(3-len(st))])
    return st

 

올바른 괄호(스택&큐) 🌟🌟
https://school.programmers.co.kr/learn/courses/30/lessons/12909

블로그 참고
스택과 큐: https://devuna.tistory.com/22
풀이 참고: https://m.blog.naver.com/crm06217/221827395221
#'('라면 스택에 넣고, ')'라면 스택에서 꺼내기, 0이 되면 True
def solution(s):
    stack = []
    for i in range(len(s)):
        if s[i] == '(':
            stack.append('(')
        else:
            if len(stack) == 0:
                return False
            else:
                stack.pop()
    if len(stack) == 0:
        return True
    else:
        return False

 

같은 숫자는 싫어(스택&큐)🌟🌟
(https://school.programmers.co.kr/learn/courses/30/lessons/12906)

  • 스택 활용
def solution(arr):
    answer = []
    for i in range(len(arr)):
        answer.append(arr[i])
        if i>0 and arr[i] == arr[i-1]:
            answer.pop()
    return answer