코딩테스트

    [프로그래머스] 택배상자 [python]

    [프로그래머스] 택배상자 [python]

    문제 문제를 이해하는 게 좀 어려울 뿐이지, 문제자체는 쉽다 stack을 사용해서 풀면된다. 코드 def solution(order): answer = 0 st = [] done = False num = 1 st.append(num) for i in order: while True: if st and i < st[-1]: done = True break if st and i == st[-1]: answer += 1 st.pop() break num += 1 st.append(num) if done: break return answer """ 보조 컨테이너 벨트는 앞뒤로 이동 가능, 맨 앞의 상자만 뺄 수 있음(스택) 택배상자는 순서대로 들어오고, 택배는 input order에 들어있음 순서가 맞는 택배를..

    [프로그래머스] 괄호 변환 [python]

    [프로그래머스] 괄호 변환 [python]

    문제 괄호하면 생각나는 자료구조인 stack을 사용하는 구현문제이다. 문제를 이해하는 게 좀 어렵지만, 그냥 저기 나와있는 그대로 하면 된다. 진짜 그대로만 구현하면 된다,, 코드 def solution(p): answer = "" # 1. return fun("", p) def fun(u,v): if v == "": return "" leftCnt = 0 rightCnt = 0 # 2. ( 와 ) 개수가 같을 때까지 찾기 for i in range(len(v)): if v[i] == "(": leftCnt += 1 else: rightCnt += 1 if leftCnt == rightCnt: if i == len(v) - 1: u = v v = "" break u = v[:i+1] v = v[i+1:]..

    [프로그래머스] 롤케이크 자르기 [python]

    [프로그래머스] 롤케이크 자르기 [python]

    문제 생각보다 간단한 문제이다. 처음에는 list를 계속 slicing 해서 set으로 변환 후, 크기 체크를 할까 했는데, O(n^2)이여서 타임아웃이 날 거 같아서 다른 방법을 생각했다. dictionary를 두 개 사용해서 풀었다. 처음에 철수의 dictionary에 topping에 있는 값을 key로 그리고 각 topping의 갯수를 value로 저장하였다. 앞에서부터 동생의 케이크에 토핑을 하나씩 추가하고, 철수의 토핑에서는 동생에 추가한 토핑을 -1하였다. 그래서 제거한 토핑의 갯수가 0이 되었다면, 철수의 dictionary에서 해당 토픽을 완전히 삭제하였다. 둘의 dictionary의 크기를 비교하여, 크기가 같다면 공정하게 나눈 것 이기 때문에 +1을 해주었다. 토핑에서 제거하는 것은 d..

    [프로그래머스] 숫자 변환하기 [python]

    [프로그래머스] 숫자 변환하기 [python]

    문제 문제는 간단했다. x를 더 큰 수로 만들 수 있는 방법은 3가지 있고, y라는 target 수에 도달하는 방법 중 최소 연산을 한 값을 구하는 거 였다. DP로 풀었다. memorize로 값들을 1억으로 초기화를 했고, 시작하는 수인 x를 0으로 설정하고, 세가지 연산을 진행하였다. 현재 계산하는 값이 1억이면 도달할 수 없는 수 이기 때문에 넘어가고, 현재까지 도달하는 데 연산 수 + 1 과 도달할 수에 저장된 값을 비교하여, 작은 값을 현재 연산 수로 저장하였다. 코드 def solution(x, y, n): answer = 0 memorize = [1e9] * (y+1) memorize[x] = 0 for i in range (x, y+1): if memorize[i] == 1e9: conti..

    [프로그래머스] 신규 아이디 추천 [python]

    [프로그래머스] 신규 아이디 추천 [python]

    문제 단계 별로 구현하면 되는 간단한 구현 문제이다. 코드 def solution(new_id): answer = '' # 1단계 new_id = new_id.lower() # 2단계 canIncludeWord = ['-', '_', '.'] newId = "" for i in range(len(new_id)): # 문자인지 if new_id[i].isalpha() or new_id[i].isnumeric() or new_id[i] in canIncludeWord: newId += new_id[i] # 3단계 while ".." in newId: newId = newId.replace("..", ".") # 4단계 newId4 = newId if len(newId4) != 0 and newId4[-1] ..