스택 4

[프로그래머스] 쇠막대기 - 스택(python)

1. 문제 설명 여러 개의 쇠막대기를 레이저로 절단하려고 합니다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자릅니다. 쇠막대기와 레이저의 배치는 다음 조건을 만족합니다. - 쇠막대기는 자신보다 긴 쇠막대기 위에만 놓일 수 있습니다. - 쇠막대기를 다른 쇠막대기 위에 놓는 경우 완전히 포함되도록 놓되, 끝점은 겹치지 않도록 놓습니다. - 각 쇠막대기를 자르는 레이저는 적어도 하나 존재합니다. - 레이저는 어떤 쇠막대기의 양 끝점과도 겹치지 않습니다. 아래 그림은 위 조건을 만족하는 예를 보여줍니다. 수평으로 그려진 굵은 실선은 쇠막대기이고, 점은 레이저의 위치, 수직으로 그려진 점선 화살표는 레이저의 발사 방향입니다. 이러한 레이저와 쇠막대..

Problem Solving 2020.06.18

[프로그래머스] 짝지어 제거하기 - 스택 (python)

1. 문제 설명 짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙입니다. 이 과정을 반복해서 문자열을 모두 제거한다면 짝지어 제거하기가 종료됩니다. 문자열 S가 주어졌을 때, 짝지어 제거하기를 성공적으로 수행할 수 있는지 반환하는 함수를 완성해 주세요. 성공적으로 수행할 수 있으면 1을, 아닐 경우 0을 리턴해주면 됩니다. 예를 들어, 문자열 S = baabaa 라면 b aa baa → bb aa → aa → 의 순서로 문자열을 모두 제거할 수 있으므로 1을 반환합니다. 2. 제한 사항 문자열의 길이 : 1,000,000이하의 자연수 문자열은 모두 소문자로 이루어져..

Problem Solving 2020.06.09

[프로그래머스] 큰 수 만들기 - 그리디 greedy | 스택 Stack (python) (2)

5. 두번째 풀이 스택을 이용하여 풀이가 가능하다. for문을 이용하여 스택에 숫자들을 넣으며 다음 조건들을 만족시켜주면 된다. 숫자를 넣었을 때 직전에 넣은 숫자가 더 작은 경우 자리를 바꾼다. 가장 위에 있는 숫자를 pop한다. 매 단계마다 1-2를 반복한다. 빼낸 숫자가 k와 같아지면 num의 나머지 숫자들을 stack에 추가해주고 끝낸다. def solution(number, k): num = list(number) stack = [num[0]] count = 0 for i in range(1, len(num)): if count == k: stack = stack + num[i:] break stack.append(num[i]) if stack[-1] > stack[-2]: while(len(s..

Problem Solving 2020.05.16

[프로그래머스] 큰 수 만들기 - 그리디 greedy | 스택 Stack (python) (1)

1. 문제 설명 어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다. 예를 들어, 숫자 1924에서 수 두 개를 제거하면 [19, 12, 14, 92, 94, 24] 를 만들 수 있습니다. 이 중 가장 큰 숫자는 94 입니다. 문자열 형식으로 숫자 number와 제거할 수의 개수 k가 solution 함수의 매개변수로 주어집니다. number에서 k 개의 수를 제거했을 때 만들 수 있는 수 중 가장 큰 숫자를 문자열 형태로 return 하도록 solution 함수를 완성하세요. 2. 제한 조건 number는 1자리 이상, 1,000,000자리 이하인 숫자입니다. k는 1 이상 number의 자릿수 미만인 자연수입니다. 3. 입출력 예 number k return "1924..

Problem Solving 2020.05.16