완전 탐색알고리즘으로 블랙잭을 구하는 문제를 풀어보았다. 카듸의 개수는 100이하로 n개의 숫자에서 3장의 카드를 더해 m의 숫자에 최대한 가까운 값을 출력하는 문제이다. 나의 경우 3중 for문으로 3장을 한장씩 나열하여 index가 1개씩 증가하면서 m과 같은 값이 나오면 break로 같지 않으면 리스트에 담도록 하였다. import sys n ,m = list(map(int, input().split())) card = list(map(int, input().split())) sum = 0 result = [] chk = True for i in range(n-2): if chk == False: break for j in range(i+1, n-1): if chk == False: br..
[백준] 셀프넘버 구하기 - Python(파이썬)
·
파이썬/코딩테스트
# 백준 4673 셀프넘버 num = 1 # 리스트 10000개로 생성 result = []*10000 # 셀프넘버가 아닌값을 구하여 리스트에 담기 while(True): n_list = list(map(int, str(num))) sum = 0 for i in range(len(n_list)): if i == 0: sum = n_list[i] + num else: sum += n_list[i] num += 1 result.append(sum) if sum >= 10000: break result2 = []*10000 num2 = 1 # 1 - 10000 까지 숫자가 담긴 리스트 생성 for j in range(10000): result2.append(num2) num2 += 1 # 셀프넘버인 값을 구하..
[백준] 콘테스트 문제 - Python(파이썬)
·
파이썬/코딩테스트
정렬 알고리즘 문제로서 20개의 점수를 나열하여 10개씩 W대학 K대학 점수를 나눈뒤 상위 3명의 점수 합을 구하는 문제이다. 파이썬으로 두개의 리스트에 값을 나눠서 넣고 정렬을 통해 상위 3개의 점수를 합산하여 출력하였다. # 콘테스트(백준 5576) 정렬문제 result1 = [] result2 = [] for i in range(20): n = input() if i < 10: result1.append(int(n)) else: result2.append(int(n)) result1.sort(reverse=True) result2.sort(reverse=True) sum1 = result1[0] + result1[1] + result1[2] sum2 = result2[0] + result2[1]..
[백준] ATM - Python(파이썬)
·
파이썬/코딩테스트
돈을 인출하는 순서에 따라 총 소요되는 시간이 얼마인가? 소요되는 시간중 최소 시간을 얼마인지 구하는 정렬 알고리즘 문제이다. 오름 차순을 하고 총합을 구하면 시간이 최소값이 되는걸 알수가 있다. 그래서 아래와 같이 정렬후 걸리는 시간의 총합을 모두 더하였다. import sys n = int(sys.stdin.readline()) result = list(map(int, sys.stdin.readline().split())) result.sort() sum = 0 mid = 0 for i in result: mid += i sum += mid sys.stdout.write(str(sum)+'\n')
[백준] 수 정렬하기 2 - Python(파이썬)
·
파이썬/코딩테스트
백준의 수정렬하기와 동일한 문제지만 N의 개수가 1,000,000 개로 단순 input() 과 print()는 시간을 할당하는데 오래걸려 sys.StdIn, sys.StdOut system 언어를 사용하여 시간 단축을 하였다. import sys n = input() result = list() for i in range(int(n)): result.append(int(sys.stdin.readline())) result.sort() for i in result: sys.stdout.write(str(i)+'\n')
[백준] 수 정렬하기 - Python(파이썬)
·
파이썬/코딩테스트
# 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. n = input() result = list() for i in range(int(n)): result.append(int(input())) result.sort() for i in result: print(i)
삽입정렬 및 계수정렬 파이썬
·
파이썬/코딩테스트
삽입정렬의 경우 시간복잡도가 중첩이 두번돌아 n제곱이지만 정렬이 거의 되어있다는 가정이면 퀵정렬보다빠른 O(N)의 속도를 가질수도 있다. 그러므로 데이터를 잘보고 정렬알고리즘을 선택할 필요가 있다. # 삽입정렬은 선택정렬과 같은 시간 복잡도를 가졌지만 거의 정렬되어있는 상태라면 삽입정렬이 빠르다. array = list(map(int, input().split())) for i in range(1, len(array)): for j in range(i, 0, -1): if array[j] < array[j-1]: array[j], array[j-1] = array[j-1], array[j] else: break print(array) 계수정렬 # 계수정렬 모든 원소의 값이 0보다 크커나 같다고 가정 ar..
[코드업] 1등한 학생의 성적 - Python(파이썬)
·
파이썬/코딩테스트
리스트 형식으로 값을 받아 공백으로 각자 배열을 만들어주었다. 첫번째 성적의 1등인 사람의 리스트 인덱스를 구하였고 인덱스 위치에 있는 값이 성적마다 등수가 몇등인지 구하였다. index의 경우 0부터 시작이라 +1을 해주었다. n = int(input()) # 입력받을 값 result = [] # 이름을 입력받을 리스트 result1 = [] # 첫번째 성적 result2 = [] # 두번째 성적 result3 = [] # 세번째 성적 for i in range(n): data = list(map(str, input().split())) result.append(data[0]) result1.append(int(data[1])) result2.append(int(data[2])) result3.appe..
[코드업] 입체기동장치 구조체 연습 - Python(파이썬)
·
파이썬/코딩테스트
n개의 기동장치를 입력하여 출력 예시처럼 값을 출력시키는 구조체 문제이다. # 코드업 구조차 연습 # 입체기동장치 생상공장 n = int(input()) # 입력받을 값 result = [] # 입체기동장치 번호와, 가스 보유량 담을 리스트 for i in range(n): data = list(map(int, input().split())) result.append(data) result.sort() # 리스트 오름차순으로 정렬 for j in range(n): final = result[j] print(final[0], final[1])
[코드업] 수 나열하기 - Python(파이썬)
·
파이썬/코딩테스트
수열 1 어떤 규칙에 따라 수를 순서대로 나열한 것을 수열(sequences)이라고 한다. 예를 들어 1 4 7 10 13 16 19 22 25 ... 은 1부터 시작해 이전에 만든 수에 3을 더해 다음 수를 만든 수열이다. 이러한 것을 수학에서는 앞뒤 수들의 차이가 같다고 하여 등차(차이가 같다의 한문 말) 수열이라고 한다. (등차수열 : arithmetic progression/sequence) 수열을 알게 된 영일이는 갑자기 궁금해졌다. "그럼.... 123번째 나오는 수는 뭘까?" 영일이는 프로그램을 만들어 더 큰 수도 자동으로 계산하고 싶어졌다. 시작 값(a), 등차(d), 몇 번째인지를 나타내는 정수(n)가 입력될 때 n번째 수를 출력하는 프로그램을 만들어보자. 나는 ..
백테스팅 연습 2
·
파이썬/백테스팅
판다스는 로우데이터를 가져올때 name_df.iloc[0] iloc으로 가져와야한다. scalar의 경우는 at이 loc 보다 빠르다.## Much faster if use `.iat` or `.at`# => Table이 크면 클수록 더 차이가 많이 남%timeit df.loc[100, '순이익률(%)']%timeit df.at[100, '순이익률(%)'] boolean을 통해 가치값들을 가져올수 있음# 이번에는 Series와 Series를 비교# 그 결과 새로운 boolean series이 생기게 되어 변수에 저장할 수 있게 됩니다.a = df['순이익률(%)'] > df['영업이익률(%)'] all() - 전부다 TRUE냐any() - TRUE가 하나라도 있냐 nan값 가져오기df[df['순이익률(%..