일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- python
- html
- 트리
- 자료구조
- list
- 알고리즘
- Combination
- 알고리즘의 조건 5가지
- 과일 장수
- 알고리즘 표현
- 스택
- LV.1
- 큐
- Import
- 코딩 테스트
- 들여쓰기로 표현한 트리
- 파이썬
- 리스트
- 태그
- 알고리즘의 조건
- 유사코드
- Tree
- 자바
- 좋은 알고리즘
- 프로그래머스
- 코딩테스트
- 유한소수 판별하기
- java
- itertools
- import itertools
- Today
- Total
목록LV.1 (21)
인천의 자유인

나의 문제 풀이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개를 뽑을 수 있습니다. 이것을 한 뒤에는 바..

나의 문제 풀이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(k, m, score): answer = sorted(score) a = len(answer)%m for i in range(a): answer.pop(0) result = 0 for i in range(0,len(answer),m): result += answer[i]*m return result k는 사과 최대 점수, m은 한 상자에 들어가는 사과 수임을 명확히 인식하고 들어가야지 헷갈리지 않습니다. 먼저 score를 오름 차순으로 정렬한 후 사과 박스에 담은 후 남은 사과 수를 구합니다. 최대 이익으로 내기 위해서는 가장 점수가 낮은 사과들을 제외하는 것이 좋기 때문입니다. 남은 사과 수는 answer 리스트 안에서 가장 점수가 낮은 사과로 구성되어야 하기 때문..

나의 문제 풀이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(a, b): day = ['FRI','SAT','SUN','MON','TUE','WED','THU'] month = [0,31,29,31,30,31,30,31,31,30,31,30] days = 0 for i in range(a): days+= month[i] days += b-1 return day[(days%7)] 아마 이 코드를 보시면 뭔가 느끼셨을 것입니다. SUN(주일)을 먼저 하지 않고 FRI(금요일)을 먼저 했다는 것을요. 그렇습니다. 2016년은 1월 1일이 금요일로 시작하기 때문에 금요일을 해주는 것이 중요하다고 생각했습니다. 그리고 month 리스트 같은 경우에도 0인덱스 부분을 0으로 만들었는데 그것은 ..

나의 문제 풀이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(cards1, cards2, goal): lis = [] one = 0 two = 0 for i in range(len(goal)): if len(cards1)>one and goal[i] == cards1[one]: lis.append(cards1[one]) one += 1 elif len(cards2)>two and goal[i] == cards2[two]: lis.append(cards2[two]) two += 1 if lis == goal: return "Yes" return "No"제가 택한 방법은 lis라는 빈..

나의 문제 풀이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로 나누어준 수를 곱하기 때문에 왼쪽에서 부터 먹는 선수 부분의 숫자 배치는 완료 됩니다. 그리고 거기다 문자열 ..

나의 문제 풀이class Solution { public String solution(int n) { String answer = ""; for (int i = 0; i 정수 n-1까지 for문을 돌리면서 i가 만약에 짝수(0포함)라면 "수"를 추가하고 홀수라면 "박"을 추가하는 코드를 완성했습니다. 이것은 인덱스 순서를 위해 이렇게 했습니다.

나의 문제 풀이def solution(strings, n): return sorted(strings, key = lambda x:(x[n],x)) 줄 길이가 굉장히 짧아서 당황하는 분들이 있을 것이라 생각한다.대부분 리스트를 오름차순으로 정렬할때 sorted를 많이 한다. 내림 차순으로 정렬을 한다고 했을 때에는 sorted를 한 뒤에 reverse=True를 하면 된다는 사실도 알 것이다. 특정 단어의 인덱스 위치에 있는 문자를 기준으로 정렬하려면 위의 코드 처럼 lambda함수를 써주면 매우 효과적이다. 어렵게 for문 많이 이용하면서 풀지 않아도 된다는 점이다.