목록algorithm (97)
하루일문
문제 10866번: 덱 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 코드 from collections import deque import sys input = sys.stdin.readline n = int(input()) li = deque([]) for _ in range(n): s = input().split() if "push_front" == s[0]: li.appendleft(s[1]) elif "push_back" == s[0]: li.append(s[1]) elif "pop_front" == ..
문제 1158번: 요세푸스 문제 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000) www.acmicpc.net 풀이 N, K = map(int, input().split()) li=[] li_2 = [] for i in range(1, N + 1): li.append(i) k = K -1 while li: if k >= len(li): while k >= len(li): k -= len(li) li_2.append(str(li.pop(k))) k -= 1 else: li_2.append(str(li.pop(k))) k -= 1 k += K print("" %(", ".join(li_2))) 해설 개인적으로 이 문제의 포인트는 출력이라고 생각한다. " ".j..
문제 10845번: 큐 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 코드 from collections import deque import sys input = sys.stdin.readline n = int(input()) li = deque([]) for _ in range(n): s = input().split() if "push" in s: li.append(s[1]) elif "pop" in s: if li: print(li.popleft()) else: print(-1) elif "size" in ..
문제 1406번: 에디터 첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수 www.acmicpc.net 포인트 제한시간이 촉박한 문제로 한번 풀었는데 시간 초과가 나서 아무리 생각해도 다른 방법이 생각이 안나서 다른 사람 코드를 보고 힌트를 얻어서 다시 만들었다. 풀이 # 시간 초과가 남 import sys input = sys.stdin.readline word = list(input().strip()) n = int(input().strip()) cursor = len(word) for _ in range(n): m = input().strip() if "..
문제 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net 문제를 간략하게 해설하자면 예시 오름차순으로 정렬된 1~8의 숫자를 스택으로 4 3 6 8 7 5 2 1의 순서로 출력하기 위해 push(+) pop(-)을 해주면 된다. 방법은 해설해서 설명하겠다 주위 : "No"가아닌 "NO"다! 입력을 주위하자 코드 import sys input = sys.stdin.readline from collections import deque ..
문제 25501번: 재귀의 귀재 각 테스트케이스마다, isPalindrome 함수의 반환값과 recursion 함수의 호출 횟수를 한 줄에 공백으로 구분하여 출력한다. www.acmicpc.net 문제를 보면 뭔가 할 것이다. 이래를 내려보면 파이썬 코드가 나와있으니 그걸 이용하여서 풀면된다. 풀이 import sys N = int(input()) def recursion(s, l, r): global cnt cnt += 1 if l >= r: return 1 elif s[l] != s[r]: return 0 else: return recursion(s, l+1, r-1) def isPalindrome(s): return recursion(s, 0, len(s)-1) for _ in range(N): c..
문제 17478번: 재귀함수가 뭔가요? 평소에 질문을 잘 받아주기로 유명한 중앙대학교의 JH 교수님은 학생들로부터 재귀함수가 무엇인지에 대하여 많은 질문을 받아왔다. 매번 질문을 잘 받아주셨던 JH 교수님이지만 그는 중앙대 www.acmicpc.net 포인트 포인트라고 하기 뭐하지만, 주위해야 할 점은 오타, 공백이다. 난 다 문제가 없는데 계속 틀려서 뭔가 했더니, 라고 답변했지는 n+1번 나오는 것을 놓쳤었다. 풀이 def what(n): if n != 1: what(n-1) print("____" * (n-1),'"재귀함수가 뭔가요?"', sep="") print("____" * (n-1), '"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.', sep="") pr..
문제 10828번: 스택 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 코드 from collections import deque import sys input = sys.stdin.readline N = int(input()) stack = deque([]) for _ in range(N): order = input().strip() if "push" in order: o = order.split(" ") stack.append(o[1]) elif order == "pop": if not stack: prin..