코딩테스트[파이썬] 236

[스택과 큐] - 고장난 프린터

고장난 프린터 현수가 다니는 회사의 프린터가 고장이 나서 프린트를 요청한 순서대로 프린트를 하는게 아니 라 약간 이상은 규칙에 의해서 프린트를 합니다. 이상한 규칙은 다음과요청한 순서에서 먼저 이 규칙을 반복하면서 만약 프린트를 요청한 [3, 1, 4, 5, 2, 6, 7] 3번, 1번 작업을 프린트 하고, 4번 작업은 맨뒤로 보냅니다. [5, 2, 6, 7, 4] 같습니다. 2개의 작업을 프린트하고, 3번째 작업은 순서상 맨 뒤로 보내버립니다. 프린트를 합니다. 작업번호 순서가 아래와 같다면 5번, 2번 작업을 프린트 하고, 6번 작업을 맨뒤로 보냅니다. [7, 4, 6] 7번, 4번 작업을 프린트 하고 6번 작업을 맨뒤로 보냅니다. [6] 마지막으로 6번 작업을 프린트합니다. 매개변수 nums에 프린..

[스택과 큐] -샌드위치

샌드위치 현수는 샌드위치를 만들려고 합니다. 식탁에 샌드위치 재료인 식빵과 토마토가 일렬로 놓여 있습니다. 현수가 만드는 샌드위치는 식빵-토마토-식빵 순으로 합쳐서 포장을 합니다. 현수는 식탁에 놓 여 있는 재료의 순서를 유지하면서 샌드위치를 만들어야 합니다. 만약 식탁에 [식빵, 식빵, 식빵, 토마토, 식빵, 식빵, 토마토, 식빵, 토마토, 식빵] 순으로 놓여 있다면 현수는 3번째, 4번째, 5번째를 합쳐서 샌드위치를 만들고, 6번째, 7번째, 8번째를 합 쳐서 샌드위치를 만들고, 2번째, 9번째, 10번째를 합쳐서 샌드위치를 만들어 총 3개의 샌드 위치를 만들 수 있습니다. 매개변수 nums에 식탁에 놓여 있는 샌드위치 재료의 정보가 주어 지면 현수가 만들 수 있는 샌드위치의 총 개수를 반환하는 프로..

[스택 과 큐] -연속된 문자 지우기

연속된 문자 지우기 매개변수 s에 문자열이 주어지면 이웃한 두 개의 문자가 같으면 두 문자를 제거합니다. 이 과 정을 반복해서 최종적으로 남는 문자만으로 이루어진 문자열을 반환하는 프로그램을 작성하세요. 만약 "acbbcaa"라는 문자열이 주어진다면 최초 bb가 연속되어 있어 제거하고 나면 "accaa"가 되고, 다시 cc가 연속되어 제거하면 "aaa"가 되고 "aa"연속되어 제거하면 "a"가 최종적으로 남 습니다. 제한사항: • 문자열 s의 길이는 100,000을 넘지 않습니다. • 문자열 s는 소문자로만 이루어져 있습니다. 나의 코드 def solution(s): answer = "" stack=[] stack.append(s[0]) for i in range(1,len(s)): if stack an..

[스택과 큐] -Backspace

Backspace 현수는 주어진 문자열의 문자 순서대로 키보드 자판의 문자를 쳐 화면에 s문자열을 작성합니 다. 문자열에는 '#'문자가 있는데 이 문자는 Backspace키를 의미합니다. 매개변수 s에 현수가 키보드 자판을 쳐야할 순서인 문자열이 주어지면 현수가 s문자열을 작성 했을 때 최종적으로 화면에 작성된 문자열을 반환하는 프로그램을 작성하세요. 화면에는 적어도 문자 한 개는 작성되어 있습니다. 제한사항: • 문자열 s의 길이는 1,000을 넘지 않습니다. 나의 코드 def solution(s): answer = "" stack=[] for x in s: if x=='#': stack.pop() else: stack.append(x) return answer.join(map(str,stack)) p..

[스택] - 올바른 괄호

올바른 괄호 괄호 문자열이 입력되면 올바른 괄호이면 "YES", 올바르지 않으면 "NO"를 출력합니다. (())() 이것은 괄호의 쌍이 올바르게 위치하는 거지만, (()()))은 올바른 괄호가 아니다. 제한사항: • 문자열 s의 길이는 100을 넘지 않습니다. 나의 코드 def solution(s): answer = 'YES' stack=[] for x in s: if x=='(': stack.append(x) elif stack and x==')': stack.pop() elif len(stack)==0 and x==')': answer="NO" if len(stack)>0: answer="NO" return answer print(solution("((()))()")) print(solution("(..

[이진탐색] -고정된 숫자

오름차순으로 정렬된 일차원 배열의 원소 중 인덱스 번호(인덱스 번호는 0번부터 시작합니다.) 와 자기 자신의 값이 같으면 이 원소를 고정된 숫자라고 합니다. 예를 들어 [-3, -2, 0, 1, 3, 5, 8, 9, 12] 배열에서 고정된 숫자는 5입니다. 배열 원소 5의 인덱스 번호가 5로 원소와 인덱스 값이 같습니다. 매개변수 nums에 오름차순으로 정렬된 정수 배열이 주어지면 배열 원소 중 고정된 숫자를 찾 아 반환하는 프로그램을 작성하세요. 고정된 숫자는 유일합니다. 고정된 숫자가 없다면 -1를 반환하세요. 제한사항: • nums의 길이는 1,000,000을 넘지 않습니다. nums의 원소는 유일값입니다. • 1

[이진탐색] -트럭 찾기

현수는 이사를 하려고 합니다. 이삿짐 센터에는 여러 개의 트럭이 있습니다. 각 트럭은 짐을 실을 수 있는 총 무게 제한이 있 습니다. 이사 비용은 현수가 선택한 트럭의 무게 제한에 곱하기 10을 한 값입니다. nums에 각 트럭의 무게 제한이 오름차순으로 주어지고, 현수의 이사하는 짐의 총 무게가 weight주어지면 현수가 짐을 실을 수 있는 최소비용의 트럭을 찾아 선택된 트럭의 인덱스 번 호를 반환하는 프로그램을 작성하세요. 인덱스 번호는 0번부터 시작합니다. 현수가 이사할 수 있는 트럭이 존재하지 않을 경우 -1를 반환합니다. 제한사항: • nums의 길이는 100,000,000을 넘지 않습니다. nums의 원소는 유일값입니다. • 1

이진탐색

이진 탐색 nums에 오름차순으로 정렬된 정수 배열이 주어지고, target에 nums배열에서 찾고자 하는 값 이 주어지면 nums배열에서 target의 인덱스 번호를 찾아 반환하는 프로그램을 작성하세요. 인덱스 번호는 0번부터 시작합니다. target값이 nums에 존재하지 않을 경우 -1를 반환합니다. 제한사항: • nums의 길이는 100,000,000을 넘지 않습니다. nums의 원소는 유일값입니다. • -100,000,000

[그리디] -카드 점수

카드 점수 N개의 카드가 일렬로 놓여져 있습니다. 각 카드에는 숫자가 적혀있습니다. 현수는 카드가 일렬로 놓여진 줄의 양 끝 즉 왼쪽 맨 끝카드와 오른쪽 맨 끝 카드 둘 중 하나 를 가져갈 수 있습니다. 현수는 양 끝에서 가져가는 방식으로 k개의 카드를 가져갈 수 있습니 다. 그리고 가져간 카드에 적혀진 숫자의 총합이 현수가 얻는 점수입니다. 일려로 놓여진 각 카드의 숫자가 매개변수 nums에 주어지고, 현수가 가져갈 수 있는 카드의 개수 k가 주어지면 현수가 얻을 수 있는 최대점수를 반환하는 프로그램을 작성하세요. 제한사항: • nums의 길이는 300,000을 넘지 않습니다. • nums의 원소는 100을 넘지 않는 자연수입니다.. • 2

[다시보기] [그리디] - 선긋기

선긋기 한 번의 선긋기는 수직선상의 한 점에서 다른 한 점까지 선을 긋는 것입니다. 선을 그을 때는 이미 선이 있는 위치에 겹쳐서 그을 수도 있습니다. 여러번 그은 곳과 한 번 그은 곳의 차이는 없습니다. 수직선은 0번 지점부터 m번 지점까지의 길이를 갖고 있습니다. 매개변수 nums에 각각의 선긋기 정보가 주어지면 0번 지점부터 m번 지점까지 연속적인 선이 그어지도록 하기 위한 선긋기 최소횟수를 반환하는 프로그램을 작성하세요. 모든 입력은 0번 지점부터 m번지점까지 연속적인 선이 그어집니다. 제한사항: • 3