Koala - 5기/기초 알고리즘 스터디

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/11880 11880번: 개미 승현이는 방학을 맞아 심심하지만, 공부는 하기 싫습니다. 이렇게 방 안에서 하루하루 시간을 낭비하던 중, 승현이는 자신의 직육면체 모양의 지우개에 개미 한 마리가 붙어 있다는 것을 알게 www.acmicpc.net 문제 코드 #include using namespace std; #include #define PI 3.141592653589793 #define ll long long int main(void) { ios::sync_with_stdio(0); cin.tie(0); int t; cin >> t; while(t--) { ll a, b, c; cin >> a >> b >> c; ll big = max(a, b)..
https://www.acmicpc.net/problem/10825 10825번: 국영수 첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 1 www.acmicpc.net n=int(input()) se=[] for i in range(n): sa=list(input().split()) se.append(sa) se.sort(key=lambda x:[-int(x[1]),int(x[2]),-int(x[3]),x[0]]) for i in range(n): print(se[i][0]) 문제푼과정 처음에는 여러개의 조건을 바탕으로 정렬할 방법이 대체 ..
https://www.acmicpc.net/problem/11656 11656번: 접미사 배열 첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 1,000보다 작거나 같다. www.acmicpc.net 문제 해석 한 단어를 입력받고 입력받은 단어의 접미사는 앞글자가 하나씩 줄은것이 된다. 이 접미사들을 사전순으로 정렬한 후 출력하는 문제이다. 코드 read = input() arr = [] for i in range(len(read)): arr.append(read[i:]) arr = sorted(arr) print("\n".join(arr)) 문제 풀이 read에 단어를 입력받는다. 접미사들을 저장하기 위해 arr 배열을 만들어준다. 앞부분이 하나씩 없어지므로 i가 0부터..
https://www.acmicpc.net/problem/5789 5789번: 한다 안한다 첫째 줄에는 테스트 케이스의 개수 N이 주어진다. (1 ≤ N ≤ 1000) 각 테스트 케이스는 한 줄로 이루어져 있으며, 0과 1로 이루어진 문자열이 주어진다. 문자열의 길이는 항상 짝수이고, 1000보다 작 www.acmicpc.net 문제분석 문제를 따라서 그대로 풀이하면 스택을 사용해야할 것 같지만 결국 마지막 원소만 비교하면 되기 때문에 단순히 마지막 문자열이 팰린드롬인지 아닌지만 판단하면 된다. 문자열로 받으라고 써있기는 하지만 팰린드롬인지를 판단하는 것이기 때문에 리스트로 받아도 무방하다. 코드 t = int(input()) for _ in range(t): n = list(input()) k = le..
엄청 많은 시도가 있었는데, 처음에 복잡하게 for문과 while 문 여러 개를 써서 구현했더니 시간초과 / 메모리초과가 계속 떴고, 이후 완전히 다르게 생각해 맞추었다. 일단 여기서 중력이 위에서 아래로 작용하기 때문에 이를 조금 손쉽게 처리하기 위해 list로 바꾸어 sort하려고 했다. a와 .은 문자열에서 sort시 '.'가 먼저고 'a'가 나중이기 때문에 그를 이용하였다. 그렇게 #가 나오기 전까지 .과 a를 하나의 list에 넣어 sort해주고 #는 그냥 넣어주는 식으로 구성한다. 이후 그림에 보이는 것처럼 꺼내주기 위해서 2차원을 1차원으로 압축시켜준 후 순서에 맞게 차례대로 print하였다. import sys sys.setrecursionlimit(100000) #중력 문제임!! N,M=..
KauKoala
'Koala - 5기/기초 알고리즘 스터디' 카테고리의 글 목록 (3 Page)