전체 글

항공대 알고리즘 동아리 Koala 🥰
https://www.acmicpc.net/problem/5218 5218번: 알파벳 거리 첫째 줄에 테스트 케이스의 수 (< 100)가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 두 단어가 공백으로 구분되어져 있다. 단어의 길이는 4보다 크거나 같고, 20보다 작거나 같으며, 알 www.acmicpc.net 문제분석 아스키 코드를 통해 풀 수 있는 문제이다. 알파벳 순으로 숫자를 부여하기 때문에 입력을 받아서 아스키 코드로 변환해주면 풀 수 있다. 빈 리스트에 변환된 아스키 코드 값을 for loop 문을 돌면서 집어넣으면 된다. 단, x가 y보다 큰 경우에 y에 26을 더해서 빼줘야 하므로 이 경우를 if 문을 통해 케이스를 추가해서 리스트에 집어넣도록 한다 코드 n = int(input..
https://www.acmicpc.net/problem/14561 14561번: 회문 n진수는 base가 n인 수를 말한다. 예를 들어 십진수는 base가 10인 수이다. n진수의 수 AmAm-1Am-2…A1A0를 n진수로 표현해보면 AmAm-1Am-2…A1A0 = Am × nm + Am-1 × nm–1 + Am-2 × nm–2 + … + A1 × n1 + A0 × n0이다. www.acmicpc.net 문제 분석 n진수는 base가 n인 수를 말한다. 예를 들어 십진수는 base가 10인 수이다. n진수의 수 AmAm-1Am-2…A1A0를 n진수로 표현해보면 AmAm-1Am-2…A1A0 = Am × nm + Am-1 × nm–1 + Am-2 × nm–2 + … + A1 × n1 + A0 × n0이다...
이 문제는 구현은 쉽지만 그냥 for문으로 돌리면 시간초과가 난다 ㅠ 그래서 더 빨리 해결할 수 있는 알고리즘을 찾아야 한다. 빨리 해결하는 방법은 그리 어렵지 않다. 일단 sort를 이용해서 두 수열(A,B)을 내림차순으로 정렬시킨다. 이 때 A의 값을 하나씩 늘리면서 점검하고, B도 값을 늘리면서 점검하는데 만약 B의 어떤 값이 A보다 작은게 나오면 어차피 뒤에 있는 것들도 다 작을 것이므로 그냥 뒤에 있는 것들의 개수를 더해주고(len(B)-j) 다시 A로 패스시킨다. 사실상 A -> A'로 넘어갈 때 어차피 A'은 A보다 작으니까 A가 B에서 그냥 stop해줬던 부분(A가 자기보다 작아서 그냥 pass했던)부터 다시 점검해주면 되니까 B의 앞에 것들은(A가 봤을 때 자기보다 컸으므로 A'에게도 큰..
일단 처음에는 내가 목표하는 수열을 input으로 다 받은 다음에 그걸 endList로 받았고, startList를 [1,2,3,...8]로 받아서 비교하는 형식의 코드를 짰는데 이렇게 할 시 상관은 없으나 시간초과가 계속 난다. ex> ''' start = / / / 4 5 6 7 8 end = / / 6 8 7 5 2 1 List= 1 2 ''' 그래서 스택 하나에 입력하는 수를 꾸준히 넣고, 넣는 도중 top이 입력한 수와 맞으면 pop하도록 하는 형식의 코드를 짜야 한다. 일단 입력을 받은 수는 목표로 하는 수이다. 그 목표보다 stack[-1]이 작으면 stack에 계속 append해주고, 크면 계속 pop해준다. (코드 짤 때 가장 헷갈릴 수 있는 것이, 목표한 것이 바로 나와버릴 때는 그냥 ..
https://www.acmicpc.net/problem/1371 1371번: 가장 많은 글자 첫째 줄부터 글의 문장이 주어진다. 글은 최대 50개의 줄로 이루어져 있고, 각 줄은 최대 50개의 글자로 이루어져 있다. 각 줄에는 공백과 알파벳 소문자만 있다. 문장에 알파벳은 적어도 하나 이 www.acmicpc.net 문제 분석 영어권에서는 어떤 글자가 다른 글자보다 많이 쓰인다. 예를 들어, 긴 글에서 약 12.31%를 차지하는 글자는 e이다. 어떤 글이 주어졌을 때, 가장 많이 나온 글자를 출력하라. 입력으로는 첫째 줄부터 글의 문장이 주어진다. 글은 최대 50개의 줄로 이루어져 있고, 각 줄은 최대 50개의 글자로 이루어져 있다. 각 줄에는 공백과 알파벳 소문자만 있다. 문장에 알파벳은 적어도 하나..
문제 https://www.acmicpc.net/problem/5363 풀이 join 과 indexing 을 활용하여 깔끔하게 한줄로 리스트를 문자열로 구성했다. 먼저 문장의 개수를 입력받고 문장을 받을 때마다 split 하여 단어단위로 저장했다. 이를 join 을 사용해서 뒤의 “두번째 단어 부터 마지막 단어까지”, “앞에서 두개의 단어” 로 각각의 문자열로 바꿔준 뒤에 합쳐서 출력했다. 코드 count = int(input()) words = [] for i in range(count) : word = input().split() words.append(word) for i in range(count) : print(" ".join(words[i][2:len(words[i])]) +" "+ " ".j..
풀이 n = int(input()) total = [0, True,False,True,True] + [0]*(n-4) for _ in range(5,n+1): if False in [total[_-1],total[_-3],total[_-4]]: total[_]= True else: total[_]=False if total[n]: print("SK") else: print("CY") c언어에서는 생각 조차 할 수 없었던 [0]*(n-4) 라는 표현을 구글링을 통해 알게 되었는데 파이썬은 내 생각보다 무지 대단한 놈 같다. 어쨋든 total 리스트는 본인 차례에 가져갈 수 있는 구슬의 개수에 따라 패배 혹은 승리가 결정되는 것을 미리 1,2,3,4개의 돌에 대한 승 패 값으로 지정해놓았다. 이 수보다 더 ..
https://www.acmicpc.net/problem/2511 2511번: 카드놀이 첫 번째 줄에는 게임이 끝난 후, A와 B가 받은 총 승점을 순서대로 빈칸을 사이에 두고 출력한다. 두 번째 줄에는 이긴 사람이 A인지 B인지 결정해서, 이긴 사람을 문자 A 또는 B로 출력한다. 만약 www.acmicpc.net 문제분석 첫 번째 줄에 A가 낼 카드 10장, 두 번재 줄에 B가 낼 카드 10장을 입력한다. 10라운드에 걸쳐 수를 비교하여 이기는 쪽이 +3점, 비기면 둘 다 +1점을 얻는다. 점수가 높은 쪽이 승, 동점일 경우 가장 마지막에 이긴 사람이 승리하는 것으로 한다. 10라운드 전부 비겼을 경우에만 비긴것으로 한다. 코드 a = list(map(int, input().split())) b = ..
문제 링크 https://www.acmicpc.net/problem/16395 16395번: 파스칼의 삼각형 파스칼의 삼각형은 이항계수를 삼각형 형태로 배열한 것인데, 블레즈 파스칼(1623-1662)을 따라 이름 붙여졌다. 단순한 형태로, 파스칼의 삼각형은 다음과 같은 방법으로 만들 수 있다. N번째 행 www.acmicpc.net 풀이 바로 위 행의 인접한 두 수의 합을 구하기 위해 다음과 같은 형태로 배열을 만들었습니다. 파란색 삼각형 부분은 n 이 5일때 나오는 형태입니다. [n+1][n+1] 크기만큼의 배열을 선언하고 0으로 초기화합니다. (1,1) 위치의 값을 1로 초기화하면 세번째 행부터 모든 값은 바로 위 행의 인접한 두 수의 합으로 구할 수 있습니다. 세번째 행은 배열에서는 2에 해당하므..
https://www.acmicpc.net/problem/2193 2193번: 이친수 0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않 www.acmicpc.net 이친수의 성질은 0으로 시작하지 않고, 1이 연속해서 나오지 않는 수를 의미한다. N을 나열하면서 예를 적어보면서 점화식을 쉽게 찾을 수 있었다.N=1 → 1N=2 → 10N=3 → 100, 101N=4 → 1000, 1001, 1010N=5 → 10100, 10110, 10000, 10001, 10010 이친수의 성질에 의해서 반드시 처음 두자리 수는 1과 0이 차례로 오게되고, 이후..
https://www.acmicpc.net/problem/2750 2750번: 수 정렬하기 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net 문제분석 첫째 줄에 N을 입력 받는다. 여기서 N은 이후에 입력받을 숫자들의 개수이다. 다음으로 둘째 줄부터는 N개의 수2를 엔터를 이용해서 입력받는다. 여기서 숫자들은 무작위로 입력을 받는 것이다. 무작위로 입력받은 숫자들을 다시 오름차순으로 정리하는 것이 2750번의 문제 내용이다. 코드 문제풀이 입력받는 input() 코드를 이용하는 것보다 시간이 조금 더 단축하기위해서 stdin.readline()..
https://www.acmicpc.net/problem/2750 2750번: 수 정렬하기 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net 문제분석 첫째 줄에 N을 입력 받는다. 여기서 N은 이후에 입력받을 숫자들의 개수이다. 다음으로 둘째 줄부터는 N개의 수를 엔터를 이용해서 입력받는다. 여기서 숫자들은 무작위로 입력을 받는 것이다. 무작위로 입력받은 숫자들을 다시 내림차순으로 정리하는 것이 2750번의 문제 내용이다. 코드 문제풀이 입력받는 input() 코드를 이용하는 것보다 시간이 조금 더 단축하기위해서 stdin.readline()을..
KauKoala
Koala