일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 좋은 알고리즘
- java
- Import
- 프로그래머스
- list
- 알고리즘 표현
- 알고리즘의 조건 5가지
- itertools
- 과일 장수
- 자바
- python
- 유사코드
- 스택
- 자료구조
- Combination
- 알고리즘
- 알고리즘의 조건
- html
- 코딩테스트
- LV.1
- 코딩 테스트
- 트리
- import itertools
- 리스트
- 태그
- Tree
- 파이썬
- 들여쓰기로 표현한 트리
- 유한소수 판별하기
- 큐
- Today
- Total
목록코딩테스트 (56)
인천의 자유인

나의 문제 풀이import itertools def solution(nums): a = list(itertools.combinations(nums,3)) answer = 0 for i in a: i = sum(i) count = 0 for j in range(2, int(i/2)+1): if i%j == 0: break count +=1 if count == int(i/2)-1: answer+=1 return answer 먼저 import itertools은 제가 정리한 글이 있으니 잘 모르신다면 보고 오시는 것을 추천드립니다. https://y01112.tistory.com/87 itertools.combinations(nums,3)을 하면 중복되지 않게 3개를 뽑을 수 있습니다. 이것을 한 뒤에는 바..

나의 문제 풀이def solution(n): a = 0 for i in range(2,n+1): answer = 0 for j in range(1, int(i**(1/2))+1): if i%j == 0 : answer += 1 if j 2: a+=1 break return n-(a+1) 1000000 이하의 자연수이기 때문에 일반적인 약수 구하는 방법은 안됩니다. 그래서 계산 횟수가 매우 적은 방법인 에라토스테네스의 체를 이용해서 할 수 밖에 없습니다. 일반적인 방법으로 하면 시관 초과로 안됩니다. 이렇게 해서 약수가 두개인 것이 소수이..

나의 문제 풀이import java.util.Arrays;class Solution { public int solution(int k, int m, int[] score) { Arrays.sort(score); int a = score.length%m; int total = 0; for (int i = a; i 배열 sort를 위해 import java.util.Arrays;를 해줍니다. 이것을 하지 않으면 sort를 할 경우 에러가 납니다. 먼저 score를 오름차순으로 정렬합니다. 그리고 score의 길이에서 m을 나눴을때 나오는 나머지를 변수 a에다가 집어 넣어 줍니다. 가장 점수가 작은 것들을 앞에 몰리게 해서 최대 수익을 내기 위함입니다..

나의 문제 풀이def solution(answers): one = [1,2,3,4,5] two = [2,1,2,3,2,4,2,5] three = [3,3,1,1,2,2,4,4,5,5] lis1 = [a - b for a, b in zip(answers, one*10000)] lis2 = [a - b for a, b in zip(answers, two*10000)] lis3 = [a - b for a, b in zip(answers, three*10000)] answer = {'1':lis1.count(0), '2':lis2.count(0), '3':lis3.count(0)} result = sorted(answer) a = max(answer, key=an..

나의 문제 풀이def solution(number, limit, power): lis = [] for i in range(1,number+1): count = 0 for j in range(1, int(i**(1/2)) + 1): if i%j == 0: count +=1 if j limit: lis.append(power) else: lis.append(count) return sum(lis) 시간 복잡도가 문제였던것 같습니다. 일반적으로 약수 구하는 공식을 썼을 경우에는 코드 실행부분은 통과해도 수가 굉장히 많이 커지면 런타임 에러로 통..

나의 문제 풀이def solution(nums): lis = list(set(nums)) if len(nums)/2 >= len(lis): return len(lis) else: return len(nums)/2 이 문제는 최대한 많은 종류 받을 수 있는 폰켓몬 수를 구하는 것입니다. 받는 수량 (len(nums)/2) 개를 받는 가정하에 말입니다. 만약 이를 구하려면 중복을 없앤 다음 구하는 것이 좋습니다. 중복이 없게 만들면 중류가 몇개가 있는지 알 수 있기 때문입니다. 먼저 중복을 없애기 위해 set로 변경해주고 혹시 모르니 list형식으로 다시 바꿈니다.(물론 안해도 문제 없을 것 같긴 하네요) 이 작업이 끝나면 가장 많은 종료를 구하면 됩니다. 만약 받는..

나의 문제 풀이def solution(k, score): lis = [] result = [] for i in range(len(score)): lis.append(score[i]) lis.sort() if i 이 프로그램에서는 "명예의 전당"의 최하위 점수를 발표한다고 했습니다.발표 점수에는 k번째 순위 점수가 내려오는 것이기 때문에 일단은 각각의 점수를 모두 lst에 더함과 동시에 정렬을 합니다. 그리고 k번째 순위 점수를 result 리스트에 추가함으로서 답을 구하는 것입니다. 다만 아직 result리스트의 길이 k를 이상이 아니라면 이렇게 할 수 없기 때문에 마지막 그냥 가장 작은 수를 출력하기 때문에 i가 k보다 작을 경우에는 lst[0]부분..

나의 문제 풀이def solution(a,b,n): total = 0 remain = 0 while n>0: remain = remain + n%a n = (n // a)*b total += n if n%a != 0: n = n + remain remain = 0 return total 먼저 총 받을 개수를 구하기 위한 total를 만들고 그리고 나눴을 때 나머지가 될 remain이라는 변수를 만들어 줍니다. 그것을 만든 후에는 n이 0이 될 때 까지 계속 루프를 돌립니다. remain을 만들어 둔 이유는 10/2 같이 나누어 떨어질 경우에는 필요가 없지만 5/2같이 나누어 떨어지지 않은 경우도..

나의 문제 풀이def solution(food): answer = '' for i in range(1,len(food)): answer += str(i)*(food[i]//2) return answer + '0' + ''.join(reversed(answer)) 0번 인덱스 자리는 무조건 물이기 때문에 인덱스 1부터 시작을 합니다.answer이라는 빈 문자열에다 숫자 배치를 더하는데 i를 str로 변환해 주고 food[i]를 2로 나누어 줍니다. 만약 food[i]가 1이라서 0이 된다면 아무것도 안더해지고 1보다 큰 수는 str형으로 변환해준 i에다 food[i]를 2로 나누어준 수를 곱하기 때문에 왼쪽에서 부터 먹는 선수 부분의 숫자 배치는 완료 됩니다. 그리고 거기다 문자열 ..