https://www.acmicpc.net/problem/1874 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 문제 풀이 첫째 줄에서는 n을 입력받고, 두번째 줄에서 네번째 줄까지는 arr이라는 배열을 생성하여 수열의 숫자를 입력해 저장하도록 한다. stack이라는 배열은 스택으로 사용하고 result라는 배열에는 +,-등의 값을 저장하도록 하며, idx 초기값은 0으로 설정한다. 반복문을 사용하여 숫자 i를 1부터 n까지 ..
분류 전체보기
https://www.acmicpc.net/problem/1202 1202번: 보석 도둑 첫째 줄에 N과 K가 주어진다. (1 ≤ N, K ≤ 300,000) 다음 N개 줄에는 각 보석의 정보 Mi와 Vi가 주어진다. (0 ≤ Mi, Vi ≤ 1,000,000) 다음 K개 줄에는 가방에 담을 수 있는 최대 무게 Ci가 주어진다. (1 ≤ Ci www.acmicpc.net 우선순위큐와 그리디 알고리즘을 적절히 섞어 써서 시간제한 내에 연산하는 것이 포인트였습니다. 각 보석의 무게와 가치를 튜플 배열로 입력 받습니다. 각 가방 용량의 최대치를 입력 받습니다 각 보석은 무게순으로, 각 가방은 용량 순으로 오름차순 정렬합니다. 각 가방의 용량을 순회하면서 가방에 담을 수 있는 보석들의 가치를 우선순위큐(maxh..
링크 https://www.acmicpc.net/problem/2164 2164번: 카드2 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 www.acmicpc.net 풀이 과정 큐를 이용하는 매우 간단한 문제였다. 1번을 제일 위에 놓고, N번까지 카드를 순서대로 놓은 뒤 1. 제일 위의 카드를 버린다 2. 1번을 수행한 이후의 카드들 중, 다시 제일 위의 카드를 제일 아래에 있는 카드 밑으로 옮긴다 위의 두 행동을 반복하는 문제로, 단순히 큐에 1부터 N까지 넣은 뒤 1번의 경우에는 pop()으로 제일 위의 카드를 버리고 2번의 경우에는 front()와..
https://www.acmicpc.net/problem/2493 2493번: 탑 첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1 www.acmicpc.net 문제분석 맨 오른쪽부터 왼쪽으로 일정 높이를 가진 탑에서 신호를 송신하면 신호를 보낸 탑보다 높이가 높은 탑만 신호를 수신할 수 있다. 예를 들어 높이가 6, 9, 5, 7, 4인 다섯 개의 탑이 수평 직선에 일렬로 서있다고 하자. 그러면, 높이가 4인 다섯번째 탑에서 발사한 레이저 신호는 높이가 7인 네 번째 탑이 수신을 하고, 높이가 7인 네 번째 탑의 신호는 높이가 5인 탑을 지나쳐 높이가..
https://www.acmicpc.net/problem/14593 14593번: 2017 아주대학교 프로그래밍 경시대회 (Large) 아주대학교 프로그래밍 경시대회(Ajou Programming Contest, APC)는 2009년 제1회를 시작으로 2014년 제6회까지 개최된 아주대학교 학생들을 위한 프로그래밍 경시대회이다. 2017년, 다른 학교에서 활발히 www.acmicpc.net 문제 분석 문제의 설명중 대부분은 실제 경시대회 규칙인듯하여, 중요한 부분만 뽑아 분석하자. ! 해결한 문제 점수의 총합이 높은 참가자가 더 높은 순위를 가진다. ! 점수의 총합이 같은 경우, 제출 횟수가 적은 참가자가 더 높은 순위를 가진다. ! 점수의 총합과 제출 횟수가 같은 경우, 마지막으로 점수를 획득한 문제의..
문제 https://www.acmicpc.net/problem/13410 13410번: 거꾸로 구구단 일반적인 구구단에서 가장 큰 수는 마지막 항의 값이 제일 크다. 거꾸로 구구단에서는, 각 항에 구구단의 계산 결과로 나온 값을 뒤집어 저장을 한다. 이렇게 하면 가장 큰 값이 항상 마지막이 www.acmicpc.net 풀이 거꾸로 숫자를 출력하기 위해서 곱셈 결과를 str 타입 캐스팅하여 String으로 바꾼 뒤에 거꾸로 뒤집어 주고, 이를 int로 타입 캐스팅한다. 이를 리스트에 넣어서 max 값을 출력한다. 코드 n, k = map(int, input().split()) mul = [] for i in range(1, k+1): mul.append(int(str(n*i)[::-1])) print(ma..
https://www.acmicpc.net/problem/10773 10773번: 제로 첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경 www.acmicpc.net 소스코드 k = int(input()) money = [] sum = 0 for i in range(k): num = int(input()) if num == 0: money.pop() else: money.append(num) for i in range(len(money)): sum += money[i] print(sum) 풀이 재민이가 입력할 케이스 k를 입력..
https://www.acmicpc.net/problem/6996 6996번: 애너그램 첫째 줄에 테스트 케이스의 개수(
문제 B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다. A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35 입력 첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36) B진법 수 N을 10진법으로 바꾸면, 항상 10억보다 작거나 같다. 출력 첫째 줄에 B진법 수 N을 10진법으로 출력한다. 예제 입력 1 ZZZZZ 36 예제 출력 1 60466175 [ 문제 분석 ] 진법이란 수를 셀 때 자릿수가 올라가는 단위를 기준으로 하는 셈법이다. 어떤 수를 n진법을 변환하려면 그 수를 0이 될 때까지 n으로 나누고, 그 나머지를 거꾸로..
https://70825.gitbook.io/koala_python_algorithm_study/ Python_Algorithm_Study - KOALA_Python_Algorithm_Study 스터디 진행자: 정다빈, 유완규 70825.gitbook.io 문제분석 입력받는 10진법의 숫자(N)를 다른 진법(B)으로 바꿔서 출력하는 문제이다. 또한, 10진법을 넘어가는 진법은 숫자가 아닌 알파벳이 나타나는데 알파벳은 대문자로 출력한다. 코드 문제풀이 10진법에서 다른 진법으로 바뀔 숫자(n)과 다른 진법(b)를 입력받는다. 그리고 하나의 딕셔너리에 각 진법에 해당하는 숫자 혹은 알파벳로 초기화시킨다. 왜냐하면 10진법에서 다른 진법으로 표현하기 위해서는 해당 값의 나머지를 필요로 하는데, 이 나머지가 해..
문제 https://www.acmicpc.net/problem/2110 2110번: 공유기 설치 첫째 줄에 집의 개수 N (2 ≤ N ≤ 200,000)과 공유기의 개수 C (2 ≤ C ≤ N)이 하나 이상의 빈 칸을 사이에 두고 주어진다. 둘째 줄부터 N개의 줄에는 집의 좌표를 나타내는 xi (0 ≤ xi ≤ 1,000,000,000)가 www.acmicpc.net 해설 공유기의 갯수가 아니라 공유기가 설치되는 거리를 이분탐색으로 탐색하면 되는 문제였다. 완전탐색으로 할 경우엔 1부터 1000000000까지 가능하므로 시간초과가 나고 이분탐색으로 탐색시 logN이므로 시간안에 풀수있다. 공유기 거리가 늘어날수록 공유기 갯수가 줄어들므로 c보다 공유기 갯수가 적을때 거리(이분탐색하고자 하는 값)를 줄여가..
문제 https://www.acmicpc.net/problem/1780 1780번: 종이의 개수 N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1 중 하나가 저장되어 있다. 우리는 이 행렬을 다음과 같은 규칙에 따라 적절한 크기로 자르려고 한다. 만약 종이가 모두 같은 수 www.acmicpc.net 해설 자른 종이안에 1, 0, -1 중 하나만 저장 되어 있는지 확인 하는 과정을 일일이 하면 시간 초과가 날까봐 어렵게 푼 문제이다.. (시간 복잡도 계산해보면 최악의 경우에도 가능) 구간합을 공부했던 것에 착안을 얻어 이차원 배열에서 d[i][j] = (1,1) ~ (i,j) 까지 -1,0,1의 개수를 저장해줬다 구조체를 사용했기 때문에 연산의 편의성을 위해 연산자 오버로딩을 ..