본문 바로가기

알고리즘 설계/내가 보려고 정리하는 문풀

(57)
최소힙 최소힙 자료를 이용하여 다음과 같은 연산을 하는 프로그램 작성 1) 자연수가 입력되면 최소힙에 입력 2) 숫자 0 이 입력되면 최소힙에서 최솟값을 꺼내어 출력 (출력할 자료가 없으면 -1 출력) 3) -1이 입력되면 프로그램 종료 ▣ 입력예제 5 3 6 0 5 0 2 4 0 -1 ▣ 출력예제 35 2내가 쓴 코드import sysimport heapq as hqsys.stdin = open("input.txt",'rt')heap = []#-1이 입력으로 들어올 때까지 반복while True: #입력받기 num = int(input()) #-1 들어오면 멈추고 프로그램 종료 if num == -1: break #0 들어오면 최솟값 꺼내어 출력 elif num =..
Anagram Anagram이란 두 문자열이 알파벳의 나열 순서를 다르지만 그 구성이 일치함예를 들면 AbaAeCe 와 baeeACA 는 알파벳을 나열 순서는 다르지만 그 구성을 살펴보면 A(2), a(1), b(1), C(1), e(2)로 알파벳과 그 개수가 모두 일치함즉, 어느 한 단어를 재 배열하면 상대편 단어가 될 수 있는 것이 아나그램.  길이가 같은 두 개의 단어가 주어지면 두 단어가 아나그램인지 판별하는 프로그램 작성 아나그램 판별시 대소문자가 구분 ▣ 입력설명 첫 줄에 첫 번째 단어가 입력되고, 두 번째 줄에 두 번째 단어가 입력됨 ▣ 출력설명 두 단어가 아나그램이면 “YES"를 출력하고, 아니면 ”NO"를 출력 ▣ 입력예제AbaAeCebaeeACA  ▣ 출력예제 YES내가 쓴 코드1import syss..
단어찾기 현수는 시를 쓰기 전에 시에 쓰일 단어를 미리 노트에 적어둡니다. 이번에는 N개의 단어를 노트에 적었는데 시에 쓰지 않은 단어가 하나 있다고 합니다. 여러분이 찾아 주세요.  ▣ 입력설명 첫 번째 줄에 자연수 N(3두 번째 줄부터 노트에 미리 적어놓은 N개의 단어가 주어지고, 이어 바로 다음 줄부터 시에 쓰인 N-1개의 단어가 주어진다.  ▣ 출력설명 첫 번째 줄에 시에 쓰지 않은 한 개의 단어를 출력한다.  ▣ 입력예제5 big good sky blue mouse sky good mousebig  ▣ 출력예제blue내가 쓴 코드import syssys.stdin = open('input.txt', 'rt')N = int(input())words = []for _ in range(N): words...
교육과정 설계 1년 과정의 수업계획을 짜야 함수업중에는 필수과목이 있고, 이 필수과목은 반드시 이수해야 하며, 그 순서도 정해져 있음만약 총 과목이 A, B, C, D, E, F, G가 있고, 여기서 필수과목이 CBA로 주어지면 필수과목은 C, B, A과목이며 이 순서대로 꼭 수업계획을 짜야 함여기서 순서란 B과목은 C과목을 이수한 후에 들어야 하고, A과목은 C와 B를 이수한 후에 들 어야 한다는 것C, B, D, A, G, E로 수업계획을 짜면 제대로 된 설계이지만C, G, E, A, D, B 순서로 짰다면 잘못 설계된 수업 계획수업계획은 그 순서대로 앞에 수업이 이수되면 다음 수업을 시작하다는 것수업계획서상의 각 과목은 무조건 이수된다고 가정필수과목순서가 주어지면, N개의 수업설계가 잘된 것이면 “YES", 잘못..
응급실 메디컬 병원 응급실에는 의사가 한 명밖에 없음응급실은 환자가 도착한 순서대로 진료를 하지만 위험도가 높은 환자는 빨리 응급조치를 의사가 해야함 이런 문제를 보완하기 위해 응급실은 다음과 같은 방법으로 환자의 진료순서를 정함:• 환자가 접수한 순서대로의 목록에서 제일 앞에 있는 환자목록을 꺼내고• 나머지 대기 목록에서 꺼낸 환자 보다 위험도가 높은 환자가 존재하면 대기목록 제일 뒤로 다시 넣기. 그렇지 않으면 진료를 받음 현재 N명의 환자가 대기목록에 있음N명의 대기목록 순서의 환자 위험도가 주어지면, 대기목록상의 M번째 환자는 몇 번째로 진료를 받는지 출력하는 프로그램 작성대기목록상의 M번째는 대기목록의 제일 처음 환자를 0번째로 간주하여 표현 ▣ 입력설명첫 줄에 자연수 N(5두 번째 줄에 접수한 순서대..
공주 구하기 정보 왕국의 이웃 나라 외동딸 공주가 숲속의 괴물에게 잡혀감 정보 왕국에는 왕자가 N명이 있는데 서로 공주를 구하러 가겠다고 함 정보왕국의 왕은 다음과 같은 방법으로 공주를 구하러 갈 왕자를 결정하기로 했음: 왕자들은 나이 순으로 1번부터 N번까지 차례로 번호가 매겨짐 그리고 1번 왕자부터 N번 왕자까지 순서대로 시계 방향으로 돌아가며 동그랗게 앉음그리고 1번 왕자부터 시계방향으로 돌아가며 1부터 시작하여 번호를 외침 한 왕자가 K(특정숫자)를 외치면 그 왕자는 공주를 구하러 가는데서 제외되고 원 밖으로 나오게 됨그리고 다음 왕자부터 다시 1부터 시작하여 번호를 외침 이렇게 해서 마지막까지 남은 왕자가 공주를 구하러 가게 됨 예를 들어 총 8명의 왕자가 있고, 3을 외친 왕자가 제외되는 경우,처음에는 3..
후위식 연산 후위연산식이 주어지면 연산한 결과를 출력하는 프로그램을 작성 만약 3*(5+2)-9 을 후위연산식으로 표현하면 352+*9- 로 표현되며, 그 결과는 21 입력예시) 352+*9-  출력예시)12내가 쓴 코드import sys#sys.stdin = open("input.txt", 'rt')s = input()stack = []#입력 문자열 순차적으로 접근#숫자 만나면 stack에 넣기#연산자 만나면 stack에서 두개 꺼내서 연산하고 결과 stack에 넣기#결과는 마지막 stack에 남은 숫자for x in s: if x.isdecimal(): stack.append(int(x)) else: x1 = stack.pop() x2 = stack.pop() ..
후위표기식 만들기 중위표기식이 입력되면 후위표기식으로 변환하는 프로그램을 작성 후위표기식은 35+ 와 같이 연산자가 피연산자 뒤에 있는 표기식중위표기식인 3+5*2 를 후위표기식으로 표현하면 352*+ 중위표기식인 (3+5)*2 를 후위표기식으로 표현하면 35+2*  입력예시) 3+5*2/(7-2) 출력예시) 352*72-/+내가 쓴 코드import sys#sys.stdin = open("input.txt", 'rt')s = input()result_stack = []operator_stack = []operator_dict = {'+': 0, '-': 0, '*': 1, '/': 1, '(': -1, ')': -1}for i in range(len(s)): #숫자면 result_stack에 일단 넣기 if ..