본문 바로가기

전체 글330

[백준 2805번] 나무 자르기 - 이분탐색 예제 # 오늘은 오후 약속이 있어 한문제만 딱 풀고 나가려했는데.. 처음 짠 코드는 항상 정답이 아니다.. -- 처음 짠 코드 # 필요한 나무 m미터 # 절단기에 지정할 높이 H 의 최댓값을 구하기 N, M = map(int, input().split()) tree = list(map(int, input().split())) height = 0 # 절단기에 설정할 높이 while True: tree_check = 0 # 반복때마다 가져갈 수 있는 나무의 양 체크 for i in range(N): if tree[i]-height>0: tree_check += (tree[i]-height) else: continue # 설정한 높이보다 주어진 나무가 낮다면 0 if tree_check < M: break else.. 2022. 1. 8.
[백준 2869번] 달팽이는 올라가고 싶다 제목만 보고 달팽이 배열 문제일 거라 생각했다. 생각해보니 달팽이 배열에선 위로 올라갈 수가 없지 -- 처음 짠 코드 a, b, v = map(int, input().split()) # 무조건 출력은 낮에 올라갔을 때 반복문이 중단되어 이루어질것 day = 1 # 걸리는 날짜 ( 일단 올라갔다고 생각 ) up = a # 올라간 높이 ( 올라갔다해 ) while up < v: day += 1 up -= b up += a print(day) 생각이 가는대로 코드를 짜보았다. 물론 3번째 예시를 넣는 순간 아차 싶었다. 10억까지 100씩더하고 99씩 빼고 있었다 ㅋㅋㅋ 1씩 더해 10억까지 가는데는 1분정도 더 걸리는군.. 참 이렇게 코드를 한번 짜고 다시 생각하려면 머리가 더 아픈 것 같다. 아무래도 하루.. 2022. 1. 6.
[22.01.06] KMP 알고리즘 # KMP 알고리즘 문자열을 찾는 데 사용되는 알고리즘ex) 웹 브라우저 상에서 현재 페이지에 포함되어 있는 특정 단어를 찾고 싶을 때 ctrl + f 를 사용 - 일반적으로 주어진 글에서 원하는 문자열을 찾고 싶다면 어떤식으로 설계해야 할까? ABC라는 단어를 찾고싶다면 우선 A로 시작하는 곳을 찾고 그 뒤가 B인지 판단, B가 맞다면 뒤가 C인지를 판단하면 되지 않을까?이렇게 한다면 앞에서부터 무작정 3글자씩 비교해보는 것보다는 효율적일 것 같다. 하지만 찾고자하는 문자가 길수록, 찾고자하는 문자열의 뒤쪽에서 오류가 날 수록 원하는 단어를 찾는데는 오랜 시간이 걸릴 것이다.: 이때의 시간 복잡도는 원본 문자열의 길이가  N, 탐색 문자열의 길이가 M일때 O(NM)으로 나타난다. -> 시간 복잡도를 O.. 2022. 1. 6.
[백준 1966번] 프린터 큐 - 큰 수부터 출력하여라 -- 처음 짠 코드 import sys T = int(sys.stdin.readline()) # 테스트케이스의 수 for _ in range(T): n, m = map(int, sys.stdin.readline().split()) # 문서의 개수, 알고싶은 문서의 현재 위치 important = list(map(int, sys.stdin.readline().strip().split())) answer_list = [] while len(answer_list) 인덱스가 -2일때 n-2로 바꾸는게 잘못되어 m의 값이 잘못되게된다. => n-2를 len(important) -1로 수정 , 하지만 아직 오류 1은 해결되지 않음 -> 프린트를 해 answer_list를 갈때와 그냥 순서를 뒤로 보낼때 구하려는 인.. 2022. 1. 5.
[백준 10989번] 수 정렬하기 3 - sort X 당연하게도 sort를 사용하면 메모리를 많이 먹는다는걸 모르고 문제 풀이를 시작했기 때문에 list에 입력받아 sort를 해 출력하는 코드를 먼저 짰다. ( 짜면서 이건 너무 쉬운데?? 라는 생각은 당연히 들었고... 답도 당연히 아닐것 같긴 했다.. ) 채점 결과 역시 틀리게 되었고 구글링 결과 생각한대로 sort가 메모리를 많이 잡아먹는것이 문제였다. -- 내가 짠 코드 # sort 사용시 메모리가 초과된다 import sys n = int(sys.stdin.readline()) a = [0] * 10000 # 10000보다 작은 수 for i in range(n): a[int(sys.stdin.readline())-1] +=1 for i in range(len(a)): if a[i] > 0: for.. 2022. 1. 4.
[백준 2775번] 부녀회장이 될테야 생각보다 코드를 짜는데 시간이 걸렸던 문제였다. 과거 java로 풀었었던 문제와 비슷하다고 생각해 하나의 리스트를 두고 누적해서 바꿔주면 되겠다고 생각했는데 반복문을 중첩해서 사용하다보니 머리에 무리가 간듯하다. - 제출 코드 T = int(input()) k = [] n = [] floor = [] for i in range(T): k.append(int(input())) n.append(int(input())) floor.append([j for j in range(1,n[i]+1)]) # 0층 리스트 for i in range(T): for _ in range(k[i]): for j in range(len(floor[i])): if j==0: floor[i][j] = 1 else: floor[i][.. 2022. 1. 2.
[백준 1929번] 소수 구하기 - 에라토스테네스의 체 - 제출 코드 import math import sys m, n = map(int, sys.stdin.readline().split()) def is_prime(x): if x==1: return False for i in range(2,int(math.sqrt(x)+1)): if x%i == 0: return False return True while m 뒤에 있는 해당 수의 배수들을 지워준다 check_list = [False]+[False] + [True] * (n-1) for i in range(2,n+1): if check_list[i]==True: # 살아있으면 소수 -> 배수들을 지워주겠다 for j in range(i*2, n+1, i): check_list[j] = False return.. 2022. 1. 2.
[백준 2609번] 최대공약수/최소공배수 - 유클리드 호제법 - 짠 코드 def gcd(x, y): min1 = min([x, y]) max1 = max([x, y]) while min1 != 0: max1, min1 = min1, max1 % min1 return max1 # 최소공배수 def lcm(x, y): return x * y // gcd(x, y) a, b = map(int, input().split()) print(gcd(a,b)) print(lcm(a,b)) # 재귀과정으로 만들면 저절로 큰값이 x, 작은값이 y로 가도록 만들 수 있다. - 최대공약수 : 두가지 수가 주어졌을 때 더이상 공약수가 없을 때까지 공약수로 나눠가며 지금까지 나눈 공약수들을 곱해주면 최대공약수가 된다. 유클리드 호제법 : 두 양의 정수 a,b (a > b)에 대하여 a =.. 2022. 1. 1.
[백준 1874번] 스택 알고리즘 - 먼저 혼자짜본 코드 import sys n = int(sys.stdin.readline()) suyeol = [int(sys.stdin.readline()) for _ in range(n)] answer = [] if sorted(suyeol[suyeol.index(max(suyeol)):],reverse=True)==\ suyeol[suyeol.index(max(suyeol)):]: for i in range(1, n + 1): answer.append(i) print('+') while answer[-1] == suyeol[0]: print('-') answer.pop() suyeol.pop(0) if len(answer)==0: break else: print(.. 2022. 1. 1.
[백준 1654번] 이분탐색 ( Binary Search) - 처음 짠 코드 import sys k, n = map(int,sys.stdin.readline().split()) lansun = [] for i in range(k): lansun.append(int(sys.stdin.readline())) count = max(lansun) while True: a = 0 for i in range(k): a += lansun[i] // count if a>=n: break else: count -= 1 print(count) 처음에는 lansun리스트에서 min을 골라 1씩 빼가며 내려가면 원하는 값을 찾을 수 있을거라 생각했다. -> 시간초과 -> input을 sys.stdin.readline()으로 바꾸고 list comprehension으로 만들어 보기도 .. 2021. 12. 31.
[산학연계공모전] 플랫포머스 주최 매니저 매칭 성공여부 예측대회 클린베테랑 매니저 매칭 성공여부 예측 (2021.11.07 ~ 2021.11.23) 최종 결과 : 6위 ( 5위까지 입상 ) 맡은 파트 : 주로 모델링 ( 피처 제작에 참여하기에 시간이 부족 ) 핵심 모델 : ExtraTree 파라미터 튜닝 : 베이지안 최적화, 랜덤 서치를 주로 사용 평가 방법 : roc_auc_score 함께한 팀원 : 구준회, 주민지, 천예은 부족했던점 1. 여러방면으로 파라미터 튜닝을 진행했지만 가장 높은 점수가 나온 결과가 자꾸 엑스트라 트리로 나왔고 이를 해결하기 위해 여러 앙상블을 진행해 보았지만 피처를 아예 갈아엎거나 새로운 피처를 만들어볼 생각을 하지 않았다. 2. 결과적으로 과적합이나 수상에 아쉽게 실패했는데 피처를 모델링하는데 있어 보였던 아쉬운 부분들을 해결하지 못한.. 2021. 12. 31.
[DACON](우수상)교통·문화·통신 빅데이터 플랫폼 융합 분석 경진대회 https://dacon.io/competitions/open/235794/overview/description 교통·문화·통신 빅데이터 플랫폼 융합 분석 경진대회 - DACON 좋아요는 1분 내에 한 번만 클릭 할 수 있습니다. dacon.io https://dacon.io/competitions/official/235794/codeshare/3455?page=1&dtype=random 영앤리치? NO! 여행리치 4050을 노려라!! 교통·문화·통신 빅데이터 플랫폼 융합 분석 경진대회 dacon.io https://2soup.tistory.com/5 [공모전 (🏆수상🏆)] 2021 교통·문화·통신 빅데이터 플랫폼 융합 분석 경진대회 공모전 (🏆우수상 수.. 2021. 11. 5.