분류 전체보기

Algorithm/Implementation

[이.코.테] 구현 (2) -- 시각, 왕실의 나이트, 게임 개발

1. 시각처음엔 시간 따로, 분 따로, 초 따로 정수를 체크했는데 ,계속 답이 맞기 않길래 슬쩍 답지 봤더니 .. 체크를 마지막에 한 번만 하더라. # 정수 N이 입력되면# 00시 00분 00초 부터 N시 59분 59초까지의 모든 시각 중에서# 3이 하나라도 포함되는 모든 경우의 수를 구하라# hour : 00 ~ N# minute : 00 ~ 59# second : 00 ~ 59def case_include_3(): cnt = 0 num = input("5 -- ") for h in range(int(num)+1): for m in range(60): for s in range(60): # 매 시각 안에 '3'이 포함되어 있다면..

Algorithm/Implementation

[Programers] 구현 / 최소직사각형 -- max(iterable), 리스트 병합 (+, extend, sum(_,[])

1. 내 코드def solution(sizes): answer = 0 w, h = 0, 0 for card in sizes: # 카드의 w, h 를 오름차순으로 정렬 card.sort() # w, h 각각의 최댓값을 변수로 할당 if card[0] > w: w = card[0] if card[1] > h: h = card[1] # w, h의 최댓값을 곱해 최소한의 크기를 반환 return w * h 직관적이고 명확하지만,sort() 를 굳이 쓰지 않아도 되는 부분에서 사용해서 다소 비효율적이다.간단한 정렬은 조건문으로 처리하자!!   2. 다른 사람 풀이 def solution..

Algorithm/Implementation

[이.코.테] 구현 (1) -- 상하좌우

구현 알고리즘이란?풀이를 떠올리는 것은 쉽지만 소스코드로 옮기기 어려운 문제.알고리즘은 간단한데 코드가 지나칠 만큼 길어지는 문제.(ex. 특정 소수점 자리까지 출력, 문자열 입력을 한 문자 단위로 파싱 등 )사소한 조건 설정이 많은 문제일 수록 코드로 구현하기 까다로움.프로그래밍 문법을 정확히 숙지하고 라이브러리 사용 경험이 풍부해야 함. * 구현이 핵심이 되는 유형- 완전 탐색 : 모든 경우의 수를 주저 없이 다 계산하는 해결 방법- 시뮬레이션 : 문제에서 제시한 알고리즘을 한 단계씩 차례대로 직접 수행  구현 시 고려해야 할 메모리 제약 사항1. int 크기 제약대체로 long long 에서 다룰 수 있는 수보다 더 큰 정수를 처리하는 문제는 잘 출제되지 않는다.Java -- long long, B..

Algorithm/Greedy

[Programers] 그리디 / 예산 -- sorted()

1. 내 코드# 각 부서가 신청한 금액만큼을 모두 지원# 최대 몇 개의 부서def solution(d, budget): total = 0 # 적은 금액부터 차례로 더해서 budget 이 커버 가능한 최대 개수 return for i, req in enumerate(sorted(d)): total += req # total 이 budget 을 넘을 경우 if total > budget: return i # total 이 budget 보다 작을 경우 return len(d) sort 를 써서 복잡도는 배열길의 n 의 O(nlogn) 이 된다.일차 반복문 -- O(n)합 및 비교 연산 -- O(1)=> 최..

Algorithm/Greedy

[Programers] 그리디 / 체육복 -- [:], set, &

1. 내 코드for 문에서 리스트를 직접 수정할 경우 수정 직후 반복문이 끝나게 된다.그래서 lost=[3,4] reserve=[4,3] 케이스에서 3만 없어지고 4는 남게 됨.이럴 경우, [:] 를 써서 리스트 카피본으로 반복문을 돌리면 반복문이 끝까지 다 돌 수 있다. 내 코드의 복잡도는 이중 반복문 (X) 과 sort (log) 로,L (lost size), R (reserve size) 라고 할 때,O(L x R + LlogL) 이다.def solution(n, lost, reserve): answer = 0 # 여벌 체육복 중 하나만 도난당했을 경우 for l in lost[:]: if l in reserve: lost.remove(l) ..

Algorithm/Greedy

[이.코.테] 그리디 (3) -- 1이 될 때까지

# N이 1이 될 떄까지 1 혹은 2 과정을 수행해야 하는 횟수의 최솟값# 1) N-1# 2) N/K -- N이 K로 나누어떨어질 떄에만 선택 가능def until_one(): n, k = map(int, input("25 5 --").split()) result = 0 while n != 1: if n % k == 0: n /= k else: n -= 1 result += 1 return resultprint(until_one())'''# K로 가능한 한 많이 나눴을 때 가장 빠르게 N=1 만들 수 있다.# N이 K의 배수가 되도록 효율적으로 한 번에 빼는 방식# N, K를 공백으로 구분하여 입력받기n, ..

Algorithm/Greedy

[이.코.테] 그리디 (2) -- 큰 수의 법칙

# 배열의 수들을 M번 더하여 가장 큰 수를 만드는 법칙.# 단, 특정 인덱스에 해당하는 수가 연속해서 K번 초과하여 더해질 수는 없음.# 인덱스가 다른데 값이 같을 경우 서로 다른 값으로 간주함.# N: 배열 크기, M: 숫자 더하는 횟수, K: 연속해서 더할 수 있는 횟수# N, M, K 공백으로 구분하여 입력 받기n, m, k = map(int, input().split())# N개의 자연수 공백으로 구분하여 입력 받기data = list(map(int, input().split()))max_value = max(data) # 가장 큰 수data.remove(max_value)next_max = max(data) # 두 번째로 큰 수result = 0cnt = k# 가장 큰 수를 더하는데,..

Algorithm/Greedy

[이.코.테] 그리디 (1) -- 숫자 카드 게임

그리디 알고리즘이란?어떠한 문제가 있을 때, 단순 무식하게, *탐욕적으로 푸는 알고리즘.(탐욕적: 현재 상황에서 가장 좋은 것만 고르는 방법)현재의 선택이 나중에 미칠 영향에 대해서는 고려하지 않는다. 즉, 사전에 외우고 있지 않아도 풀 수 있을 가능성이 높은 문제 유형.단, 많은 유형을 접해보고 문제를 풀어보며 훈련을 해야한다.창의력이 중요함! 그리고 문제 풀이를 위해 해법을 찾을 때, 이것이 정당한지 검토해야 답을 도출할 수 있다.문제 유형 파악이 어렵다면 그리디 알고리즘을 의심하고,오랜 시간 고민해도 그리디 알고리즘으로 해결방법을 찾을 수 없다면, 그때는 다른 알고리즘 방법을 떠올려보다.   # 여러 개의 숫자 카드 중 가장 높은 숫자가 쓰인 카드 한장을 뽑는 게임# 행을 선택 -> 가장 숫자가 작..

함s
'분류 전체보기' 카테고리의 글 목록 (2 Page)