SW개발/코딩테스트
[백준]18258번 큐 2 - 큐
import sys from collections import deque n = int(sys.stdin.readline()) queue = deque([]) for i in range(n): command = sys.stdin.readline().strip() if command.split()[0] == 'push': queue.append(command.split()[1]) elif command == 'pop': if len(queue) > 0 : print(queue.popleft()) else : print(-1) elif command == 'size': print(len(queue)) elif command == 'empty': if len(queue) == 0 : print(1) else ..
[백준]1874번 스택 수열 - 스택
n = int(input()) list=[] cnt = 1 stack = [] result = [] temp = True for i in range(n): list.append(int(input())) for i in range(n): while cnt
[백준]4949번 균형잡힌 세상 - 스택
def vps(p): stack = [] check = True for i in p: if i == "(" or i == "[": stack.append(i) elif i == ")" or i == "]": if i == ")": if not stack or stack[-1] == "[" : # ")", "]" 로 먼저 시작되는 경우 no check = False break else: stack.pop() elif i == "]": if not stack or stack[-1] == "(": check = False break else: stack.pop() if not stack and check == True: print("yes") else: print("no") while True: p = inp..
[백준]9012번 괄호 - 스택
n = int(input()) def vps(p): stack = [] for i in p: if i == "(": stack.append(i) else: if not stack: print("NO") return else: stack.pop() if not stack: print("YES") return else: print("NO") return for i in range(n): p = input() vps(p) 코드 설명 반복 횟수를 n 변수에 입력 받는다. 그 후 반복문을 통해 괄호를 입력받고, 함수를 실행한다. 만약 문자가 "(" 라면 스택에 넣는다. 문자가 ")" 일때 만약 스택에 아무 것도 없다면 "NO"를 출력한다. 스택에 값이 존재한다면 "("를 pop 한다. 반복문을 돌고 난 후 스택이..
[백준]10773번 제로 - 스택
import sys n = int(sys.stdin.readline()) stk = [] for i in range(n): value = int(sys.stdin.readline()) if(value == 0): stk.pop() else: stk.append(value) print(sum(stk)) 코드 설명 먼저 반복할 횟수를 n 이라는 변수에 저장 후 빈 리스트를 생성한다. 값을 입력 받으면서 그 값이 0이라면 저장하지 않고, pop() 연산을 통해 이전에 받은 값을 지운다. 0이 아닐 경우에는 저장한다. sum() 함수를 이용하여 스택의 합을 출력한다. Point : 0일 경우에는 저장 대신 삭제 기능을 구현한다.
[백준]10828번 스택 - 스택
import sys a = int(sys.stdin.readline()) stk = [] for i in range(a) : command = sys.stdin.readline().strip() if(command.split()[0] == 'push'): stk.append(int(command.split()[1])) elif(command == 'pop'): if len(stk) > 0: print(stk.pop()) else : print(-1) elif(command == 'size'): print(len(stk)) elif(command == 'empty'): if len(stk) == 0 : print(1) else : print(0) elif(command == 'top'): if len(st..
[백준]1541번 잃어버린 괄호 - 그리디
a = input().split('-') sum = 0 for i in a[0].split('+'): sum += int(i) for i in a[1:]: for j in i.split('+'): sum -= int(j) print(sum) 코드 설명 먼저 -를 기준으로 문자열을 분리시켜 저장한다. 그 후, 리스트의 첫번째 원소에 있는 숫자들을 더해주기 위해 + 로 분리하고 그 값을 더해준다. 그 다음 리스트의 두번째 원소부터 +로 모두 분리시켜 준 뒤, 그 값을 모두 뺄셈하여준다. Point : 해당 수식에서 -를 만나면 다음 -가 나오기 전까지는 모두 뺄셈을 해주면 최솟값을 만들 수 있다. 따라서, -로 문자열을 분리 시킨 후 분리되어 있는 값들은 + 이므로 수들을 더하여 준 후, 그 더한 수를 뺄셈..
[백준]11399번 ATM - 그리디
n = int(input()) sum = 0 result = 0 a = list(map(int, input().split())) a.sort() for j in range(n): sum += a[j] result += sum print(result) 코드 설명 먼저 각 사람이 돈을 인출하는데 필요한 시간을 a 라는 리스트에 저장한 후 정렬을 해준다. 그 후 n 만큼 반복문을 돌리면서 sum 이라는 변수에 각 사람당 걸리는 시간을 구하고 누적 시간을 구하기 위해 result 변수에 덧셈해준다. Point : 각 상황에서 가장 최소의 시간이 걸리게 하는 것이 그리디 알고리즘이 되므로, sort() 함수를 통하여 정렬을 해준다. 그 후 누적시간을 구해야 하기 때문에 sum -> 각 사람이 걸리는 시간, res..
[백준]1931번 회의실 배정 - 그리디
n = int(input()) a = [[1]*2 for i in range(n)] cnt = 0 check = 0 for i in range(n): a[i][0], a[i][1] = map(int, input().split()) a.sort(key=lambda x:(x[1], x[0])) for i in range(n): if a[i][0] >= check: cnt += 1 check = a[i][1] print(cnt) 코드 설명 먼저 회의의 수를 위한 n, 회의의 정보를 위한 a 리스트, 회의의 최대 개수를 위한 cnt, 끝나는 시간을 체크하기 위한 check 변수를 선언한다. 그 후 회의 수 만큼 반복문을 통해 a 리스트에 회의의 정보를 전부 할당한 후, 정렬 함수를 통하여(lambda 사용) 끝..
[백준]11047번 동전 0 - 그리디
import math n, k = map(int,input().split()) a = [] cnt = 0 for i in range(n): a.append(int(input())) for i in range(len(a)-1, -1, -1): if k < a[i] : continue cnt = cnt + int(k / a[i]) k = k % a[i] if k == 0: break print(cnt) 코드 설명 먼저, 입력 개수와 계산하려는 값을 map 함수를 이용하여 n, k 변수에 저장한다. 그 후 빈 리스트와 카운트를 위한 변수를 선언하고 n의 수만큼 반복문을 통해 동전의 가치를 입력받고 리스트에 저장한다. 저장된 리스트는 가장 큰 동전의 가치가 맨 뒤에 있으므로 리스트의 뒤부터 판단하여 동전의 가치..